1

我正在尝试将项目从使用 ObjectContext 的旧实体框架迁移到 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 谓词。

如何以同样适用于相关/外键表的最佳方式做到这一点?我是否在这里遗漏了一些东西 - 因为对于以前非常简单的东西来说这似乎是一件困难的事情?

4

1 回答 1

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");
于 2013-08-14T18:35:17.790 回答