尝试将EF / Linq用于实体以进行动态查询和CRUD操作

时间:2013-02-24 14:05:54

标签: entity-framework linq-to-entities

(建议在此重新发布此问题...最初发布于msdn论坛)

我正在努力为使用EF / Linq to Entities的一些简单CRUD操作编写“通用”例程。我在ASP.NET(C#或VB)工作。

我看过:

  1. 使用“GetObjectByKey”获取对动态选择表的引用(但我不需要缓存中的任何内容。我想要数据库中的数据。看起来不是这个函数的用途)。

  2. CRM动态实体(这里你可以传递一个tablename字符串来查询)看起来像我正在寻找的方法但是我不知道这个CRM工作必须保持最新(?)和/或对未来有很大的保证??

  3. 我查看了通过命名空间/对象钻取的各种方法,以便到达我可以将TableName参数传递给经常使用的查询语法var query =(from c in context.C_Contacts select c); (例如)我可以在某种程度上换掉“C_Contacts”TEntity,具体取决于我想要使用的表。但没有找到办法做到这一点??

  4. 略微过度简单化,我只是希望能够将tablename参数和某些相关的字段名和值(可能在通用对象中?)传递给我的例程,然后让该例程动态插入到LINQ to Entity中数据上下文/模型,并为参数表执行一些标准的“全选”操作,或者根据通用记录ID对参数表执行删除操作。我试图避免基于tablename等调用各种不同的自动生成的L2E方法......而只是尝试深入研究数据上下文,最后是动态传递的表/字段名称的L2E查询语法。

    有没有人找到任何成功/有效的方法来做到这一点?任何想法,链接,例子?

1 个答案:

答案 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 ...
}