2013-02-24 46 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