2013-02-24 47 views
0

(如建議重新張貼在這裏這個問題......最初發布在MSDN論壇)嘗試使用EF/LINQ到實體的動態查詢和CRUD操作

我努力寫一個「通用」常規一些簡單的使用EF/Linq到實體的CRUD操作。我在ASP.NET(C#或VB)中工作。

我已經看了看:。

  1. 獲得與「GetObjectByKey」(可是我不想從緩存中任何一個動態選擇表的引用我想從數據庫中的數據好像不是這樣功能是爲了)。

  2. CRM動態實體(在這裏您可以傳遞一個表名字符串來查詢)看起來像我正在尋找的方法,但我不知道這個CRM努力必須保持當前(?)和/或已經對未來有很大的保證?我查看了通過命名空間/對象進行鑽取的各種方法,以便我可以將TableName參數傳遞到常用查詢語法中。var query =(from c in context.C_Contacts select c); (例如)在哪裏我可以換出「C_Contacts」TEntity取決於我想使用哪個表。但沒有找到一種方法來做到這一點?

略高於simplyfing,我只是希望能夠傳遞一個表名參數,並在某些情況下,一些相關的字段名和值(也許在一個通用對象?)我的例程,然後讓這種日常動態插件到LINQ to Entity數據上下文/模型中,併爲參數表執行一些標準的「全選」操作或根據通用記錄ID對參數表進行刪除。我試圖避免調用基於表名等的各種不同的自動生成的L2E方法......而只是試圖鑽取數據上下文,並最終鑽取動態傳遞的表/字段名稱的L2E查詢語法。

有沒有人發現任何成功/有效的方法來做到這一點?任何想法,鏈接,例子?

回答

0

DbContext對象具有通用的Set()方法。從字符串開始時,這會給你

from c in context.Set<Contact>() select c 

這裏的方法:

public void Test() 
{ 
    dynamic entity = null; 
    Type type = Type.GetType("Contract"); 
    entity = Activator.CreateInstance(type); 
    ProcessType(entity); 
} 

public void ProcessType<TEntity>(TEntity instance) 
    where TEntity : class 
{ 
    var result = 
     from item in this.Set<TEntity>() 
     select item; 

    //do stuff with the result 
    //passing back to the caller can get more complicated 
    //but passing it on will be fine ... 
} 
+0

啊,我看到了(http://msdn.microsoft.com/en-us/library/gg696521( v = VS.103).aspx) – 2013-02-24 19:25:03

+0

我會探討的。我正在使用EF的早期版本。這看起來像一個5.0的方法,所以我會升級。目前,我現在正在使用的是使用context.ExecuteStoreCommand(「從_Contacts刪除ContactID =」+ vID)這實際上工作..但不覺得我充分受益於EF和L2E的許多功能! ! ;)謝謝你... – 2013-02-24 19:28:32

+0

我同意執行sql似乎違背了ORM的本質。如果你正在升級它可能會直接到版本6. – qujck 2013-02-24 19:50:41