2017-07-17 16 views
0

Entity Frameworkを使用していくつかの動的コードを実行しようとしています。私は1つのテーブル(Test1)でモデル(Model1)を持って、それは簡単です。私がしようとしているのは、異なる名前のタスクの後でそれを使用するために、テーブルの名前をプログラム的にTest1モデルにアクセスすることです。私はこのコードを実行したとき、それはentityPropertyEntity Frameworkの文字列でエンティティを取得する

Model1Container m = new Model1Container(); 
      PropertyInfo entityProperty = m.GetType().GetProperties().Where(t => t.Name == "Test1").Single(); 
      var baseQuery = (IQueryable<IIdentity>)entityProperty.GetValue(m, null); 

を設定しようとする上で壊れる...

を私はグーグルで探していたと私はFinding entities by key in entity frameworkを発見したが、それはdoesntの仕事だ、または私はすべてのアイデアを持っていません申し訳ありませんが説明します。

アイデア?

答えて

0

あなたは、文字列名を持つオブジェクトを作成し、そのプロパティを設定します。

public class Test 
{ 
    //All my classes have these properties 
    //You can set up an interface and in the method you can set entity to an interface type 
    //You can even put these interfaces on edmx generated entities 
    //http://stackoverflow.com/questions/14059455/adding-validation-attributes-with-an-entity-framework-data-model 
    public string AString { get; set; } 
    public DateTime ADate { get; set; } 
} 

public class HomeController : Controller 
{ 
    public ActionResult IndexStackOverflow101() 
    { 
     Assembly assembly = Assembly.Load("Testy20161006"); 
     Type t = assembly.GetType("Testy20161006.Controllers." + "Test"); 
     Object entity = (Object)Activator.CreateInstance(t); 
     PropertyInfo entityProperty = t.GetProperty("AString"); 
     PropertyInfo entityPropertyTwo = t.GetProperty("ADate"); 
     entityProperty.SetValue(entity, Convert.ChangeType("ap", entityProperty.PropertyType), null); 
     entityPropertyTwo.SetValue(entity, Convert.ChangeType(DateTime.Now, entityPropertyTwo.PropertyType), null); 
+0

私は私が間違って説明したと思います...私が欲しいのは、私がモデルを持っていることを、プログラム的に一方のエンティティのインスタンスを取得することです。この方法では、文字列を使用してm.Test1 ....を書き込まずにエンティティを取得できます。代わりにm ["Test1"](似たような方法ではありません)と似たものが必要です。 Thx – kartGIS

+0

エンティティの部分クラスを作成し、メタデータを使用してフィールドに[必須]またはその他の属性を設定することもできます。http://stackoverflow.com/questions/14059455/adding-validation-attributes-with-anentity-framework- data-modelこれを行うと、各エンティティをIEntityから派生させ、IEntityを定義することができます。その後、アセンブリアセンブリ= Assembly.Load( "Testy20161006")を実行できます。 タイプt = assembly.GetType( "Testy20161006.Controllers。" + "Test"); IEntityエンティティ=(オブジェクト)Activator.CreateInstance(t);クレジットJohn Skeet – kblau

+0

Thx @kblau!私はそれをそのようにした – kartGIS

関連する問題