【问题标题】:Attempting to use EF/Linq to Entities for dynamic querying and CRUD operations尝试使用 EF/Linq to Entities 进行动态查询和 CRUD 操作
【发布时间】:2013-02-09 17:48:47
【问题描述】:

(建议在此处重新发布此问题...最初发布在 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 查询语法。

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

【问题讨论】:

    标签: entity-framework linq-to-entities


    【解决方案1】:

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

    【讨论】:

    • 我将对此进行探索。我正在使用早期版本的 EF。这看起来像 5.0 方法,所以我将升级。目前我现在正在使用的工作是使用 context.ExecuteStoreCommand("Delete From _Contacts where ContactID = " + vID) 实际有效..但感觉我并没有充分利用 EF 和 L2E 的许多功能! ! ;) 谢谢...
    • 我同意执行 sql 似乎违背了 ORM 的本质。如果您要升级,可能值得直接升级到版本 6。
    • 我只使用 Set() 方法。我的上下文没有命名 DbSet。
    猜你喜欢
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多