这是一个多方面的问题,所以请多多包涵!我有两个疑问:
var dynamicResult = Repository.Select<Table1>()
.Where(b => b.InactivatedD == null)
.Select(b => b.Table2);
var staticResult = Repository.Select<Table2>()
.Where(b => b.column == "CONSTANT");
return dynamicResult.Union(staticResult).ToList();
这工作正常。现在,我向 Table2 类添加了一个附加属性,并指示 EF 忽略我的配置中的字段,如下所示:
Ignore(e => NewColumn);
这也很有效,因为我可以正确设置字段而 EF 不会抛出异常。现在我不知道是否有一种简单的方法可以做我想做的事。在我的第一个查询中,Table1 有一个列,我想用它来补充 Table2 上的这个新列,但我不知道有什么简单的方法可以做到这一点。我唯一能想到的是:
var dynamicResult = Repository.Select<Table1>()
.Where(b => b.InactivatedD == null)
.Select(b => new Table2 { Column1 = b.Table2.Column1, NewColumn = b.SomeColumn ... <additional initialization> });
这有点混乱,初始化会变得很长,因为这个实体有大约 15 列我需要水合。当然,我可以只在我的属性中遍历 Table2 和 Table1 之间的关联,而不是尝试在上面的查询中设置它,但这似乎是额外的工作和一个需要维护的查询。此外,当使用上述方法时,我的联合不再起作用。如果我的查询如下所示:
var dynamicResult = Repository.Select<Table1>()
.Where(b => b.InactivatedD == null)
.Select(b => new Table2 { Column1 = b.Table2.Column1, NewColumn = b.SomeColumn })
var staticResult = Repository.Select<Table2>()
.Where(b => b.column == "CONSTANT")
.Select(b => new Table2 { Column1 = b.Table2.Column1, NewColumn = b.SomeColumn })
return dynamicResult.Union(staticResult).ToList();
我得到一个例外,实体或复杂类型(表 2)不能由实体框架查询构造,这让我不知所措。在我告诉 EF 忽略 NewColumn 之前,我明白为什么会出现这个错误,但现在我不确定为什么会弹出这个错误。
总而言之:有没有比我上面提出的更好的方法来补充我的新列,任何人都可以确定为什么我无法在查询中合并使用 new 创建的实体?
谢谢!