2017-07-17 149 views
0

我正在嘗試使用實體框架做一些動態代碼。我有一個模型(Model1)和一個表格(Test1),這很簡單。我想要做的是用程序名稱編程訪問模型Test1,以便在不同的任務中使用它。我一直在尋找在谷歌,我發現Finding entities by key in entity framework但它不工作,或者我沒有任何想法...通過實體框架中的字符串獲取實體

當我運行這段代碼它打破上試圖設置entityProperty

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

對不起,解釋。

任何想法?

回答

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-an-entity-framework-數據模型一旦你這樣做,你可以讓每個實體從IEntity派生並定義IEntity。然後你可以做Assembly Assembly = Assembly.Load(「Testy20161006」); 類型t = assembly.GetType(「Testy20161006.Controllers。」+「Test」); IEntity entity =(Object)Activator.CreateInstance(t);信貸John Skeet – kblau

+0

Thx @kblau!我這樣做了 – kartGIS