在DbContext / EF6上进行eSQL查询

时间:2013-08-14 09:43:58

标签: c# entity-framework

我正在尝试使用ObjectContext将项目从较旧的Entity Framework迁移到DbContext。我的问题是ObjectSet<Garden> & EntityCollection<Flowers>现在是DbSet<Garden> & ICollection<Flowers>,我的代码需要针对表和实体导航/相关表运行动态查询。

var flowers = Gardens.Where("it.Name = @name").First().Flowers.Where(blah);

LINQ不是替代方案 - 必须基于动态构建字符串(由网格构建的eSQL,由用户输入等,并用于Where,GroupBy,OrderBy)。只有ObjectQuery<>似乎有字符串/ eSQL谓词。

如何在相关/外键表上运行的最佳方法?我在这里错过了一些东西 - 因为对于之前非常简单的事情来说这似乎很难吗?

1 个答案:

答案 0 :(得分:2)

我通过创建添加到主上下文(对表的查询)和所有实体(导航/外键)的T4文件来解决这个问题。这是简化版本:

// Get table as ObjectQuery
var myGarden = ((IObjectContextAdapter)this).ObjectContext.CreateObjectSet<Garden>("Gardens").First();
// myGarden is ObjectQuery with eSQL support
var foo = myGarden.Where("it.Works = true");
// Get the Flowers (navigation) from the Garden entity as ObjectQuery
var flowers = (ObjectQuery<Flower>)Entry(myGarden).Collection<Flower>("Flowers").Query();
// flowers is ObjectQuery with eSQL support
flowers.Where("it.AlsoWorks = true");