【发布时间】:2021-02-28 13:50:12
【问题描述】:
我正在使用 Entity Framework Core 5 和 Table Per Type feature。
我有Contractor 实体和两个继承的实体:Company 和Individual。
我需要联合他们。
我正在尝试使用以下代码将它们合并到一个集合中:
var companies = (from company in _dbContext.Companies
.Include(c => c.ShareHolders)
.Include(c => c.Director)
select company).Cast<Contractor>();
var individuals = (from individual in _dbContext.Individuals
select individual).Cast<Contractor>();
Contractors = new ObservableCollection<Contractor>(companies.Union(individuals));
在DBContext中我有如下配置方法:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Company>()
.HasOne(c => c.Director);
modelBuilder.Entity<Shareholder>()
.HasOne(s => s.Contractor);
modelBuilder.Entity<Company>()
.HasMany(c => c.ShareHolders)
.WithOne(f => f.Company)
.OnDelete(DeleteBehavior.Cascade);
}
问题:
如何消除异常或如何修改我的配置以便填充股东,并且我可以简单地使用 Contractors DbSet 而不是手动构建联合查询?
System.InvalidOperationException
无法转换集合操作,因为两个操作数具有不同的“包含”操作。考虑在两侧应用相同的“包含”。
堆栈跟踪:
在 Microsoft.EntityFrameworkCore.Query.Internal.NavigationExpandingExpressionVisitor.ProcessSetOperation(NavigationExpansionExpression outerSource, MethodInfo genericMethod, NavigationExpansionExpression innerSource)
使用 .Union() 失败。
以前我在 DbContext 中有 Contractors DbSet,但 Shareholders 集合没有填充公司对象。于是我改写了如上所示的代码。
【问题讨论】:
标签: c# entity-framework entity-framework-core entity-framework-core-5