(建议在此重新发布此问题...最初发布于msdn论坛)
我正在努力为使用EF / Linq to Entities的一些简单CRUD操作编写“通用”例程。我在ASP.NET(C#或VB)工作。
我看过:
使用“GetObjectByKey”获取对动态选择表的引用(但我不需要缓存中的任何内容。我想要数据库中的数据。看起来不是这个函数的用途)。
CRM动态实体(这里你可以传递一个tablename字符串来查询)看起来像我正在寻找的方法但是我不知道这个CRM工作必须保持最新(?)和/或对未来有很大的保证??
我查看了通过命名空间/对象钻取的各种方法,以便到达我可以将TableName参数传递给经常使用的查询语法var query =(from c in context.C_Contacts select c); (例如)我可以在某种程度上换掉“C_Contacts”TEntity,具体取决于我想要使用的表。但没有找到办法做到这一点??
略微过度简单化,我只是希望能够将tablename参数和某些相关的字段名和值(可能在通用对象中?)传递给我的例程,然后让该例程动态插入到LINQ to Entity中数据上下文/模型,并为参数表执行一些标准的“全选”操作,或者根据通用记录ID对参数表执行删除操作。我试图避免基于tablename等调用各种不同的自动生成的L2E方法......而只是尝试深入研究数据上下文,最后是动态传递的表/字段名称的L2E查询语法。
有没有人找到任何成功/有效的方法来做到这一点?任何想法,链接,例子?
答案 0 :(得分: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 ...
}