2013-01-03 43 views
2

所以我試圖動態加載我的域名數據服務,其中的表名是字符串...這是我到目前爲止:通常我會加載像這樣:DomainDataService(ViewModel)通過字符串名稱加載實體

theDomainDataService.Load(theDomainDataService.getUsersQuery()); 

所以我想自動化哪個實體是由字符串名稱加載。

String theVariableEntityName = "Users"; 
Type t = theDomainDataService.GetType(); 
MethodInfo stuff = t.GetMethod("Get" + theVariableEntityName + "Query"); 
var theQuery = stuff.Invoke(theDomainDataService, null); 
theDomainDataService.Load((EntityQuery<MySite.Web.Models.User>)theQuery); 
    ---------------------------------------------------------^ Problem 

這實際上是正確加載我domainDataService,但我需要的是推斷EntityQuery的類型(沒有明確聲明這將是一個用戶)一個動態的方式,因爲實際上它可以是任何東西。

我試過這個從DomainDataService類沒有運氣,它沒有找到方法的「設置」或「條目」。

public List<object> void PopulateEntity(string theEntityName) 
    { 
     Type theEntity = Type.GetType("MySiteMaintenance.Web.Models." + theEntityName); 
     using (var db = new DatingEntities()) 
     {       
       IQueryable query = db.Set(theEntity); 
       foreach (var item in query) 
       { 
        var entry = db.Entry(item); 
       } 
     } 
    } 

記住,所有我需要的是一個人口稠密的實體(當所有我已經是實體的名稱)填充客戶端...所以我可以說

DomainServiceClass theClass = new DomainServiceClass(); 
theClass.Load(theClass.GetEntityNameQuery()); 

所以我可以引用適當地加載實體... theClass.Entity(用戶...問題,等等。)

+0

現在回想起來,其實這是正確加載的實體。但我需要一種方式來動態指定我的「類型」(MySite.Web.Models.User)想法? :( – Kulingar

+0

可以從((TabItem)發件人).Header'?推導出類型(例如:'MySite.Web.Models.User'),還是將它作爲參數傳遞? – GolfWolf

回答

5

我仍然不知道我跟隨,但...

我有一個Post實體在我Sandbox命名空間,我在一個字符串開始使用實體類型的名字從我DbContext實例得到...

   // Get my entity type (if in same assembly, else you'll have to specify) 
       Type postType = Type.GetType("Sandbox.Post"); 

       using (var db = new StackOverflowEntities()) {       

        // not required 
        db.Configuration.ProxyCreationEnabled = false; 

        IQueryable query = db.Set(postType); 
        foreach (var item in query) { 

         DbEntityEntry entry = db.Entry(item); 

        } 
       } 

導致檢索根據實體類型爲字符串的任何DbSet。在foreach循環中的斷點下面 - 顯示值。

​​

+0

我認爲你釘了它 – CSharpie

+0

Can not find方法Set。爲了得到它的價值,我必須從域服務類運行這段代碼才能訪問我的實體 – Kulingar

+0

Set方法是關閉你的DbContext派生類的,你使用哪個版本的EF? –

相關問題