【问题标题】:Dynamic EF Query动态 EF 查询
【发布时间】:2014-10-27 15:18:30
【问题描述】:

我正在考虑设计一个业务规则引擎,它基本上从存储在数据库中的一组字符串值生成一个 EF 查询。

例如我将连接字符串、表名、where 条件谓词和选择谓词作为字符串字段存储在数据库中,并希望动态构造 EF 查询。例如

var db = new DbContext(“connectionstring”);

var wherePredicate = Expression.FromString(“p => p.StartDate > new DateTime(2014,5,1))
var selectPredicate = Expression.FromString(“p => p”)

var results = db.Set(“Projects”).Where(wherepredicate).Select(selectPredicate)

为了构建谓词,我可以使用 DynamicExpression 或 Dynamic LINQ 库。

但是,我如何访问 db.Set(“Projects”) 其中 Projects 是实体名称并应用 where 和 select 谓词? (或类似db[“Projects”].Where().Select)。

我尝试了DbContext.Set(Type entityttype) 方法的非泛型版本,但不知道如何将WhereSelect 谓词应用于返回的对象。

我试图避免生成 SQL 查询,而是依赖于动态生成的 EF 代码。

【问题讨论】:

  • 似乎您将失去实体框架的所有好处。

标签: entity-framework


【解决方案1】:

这没有多大意义。您可以使用反射创建适用于string 而不是泛型类型的方法,但您必须返回DbSet 而不是DBSet<T>。而在那一个上,你不能执行 LINQ 的方法(基本上),因为没有类型(在编译期间)。当然,您可以使用反射一直做到这一点,但是,为什么?您正在失去 O/R 映射器为您所做的 90%。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    相关资源
    最近更新 更多