0

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

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

我看过:

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

  2. CRM 动态实体(在这里您可以传递一个表名字符串进行查询)看起来像我正在寻找的方法,但我不认为这种 CRM 工作必须保持最新(?)和/或对未来有很大的保证??

  3. 我查看了通过命名空间/对象进行钻取的各种方法,以到达可以将 TableName 参数传递到常用查询语法的位置 var query = (from c in context.C_Contacts select c); (例如)我可以根据要使用的表以某种方式换出“C_Contacts”TEntity。但没有找到办法做到这一点?

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

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

4

1 回答 1

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 ...
}
于 2013-02-24T18:57:56.197 回答