【发布时间】:2021-03-24 20:13:48
【问题描述】:
我有一个类型和子类型
public class Reservation
{
public int Id {get; set;}
public TimeSpan Length {get; set;}
}
public class Appointment : Reservation
{
public Customer Customer {get; set;}
}
数据库上下文
public DbSet<Reservation> Reservations { get; set; }
public DbSet<Appointment> Appointments { get; set; }
每个层次结构表 (TPH) 是当前设置,因为它是 ef core 3.1 的唯一选项。
现在我想查询超集Reservations 并在Reservation 为Appointment 时包含Customer。我尝试像这样在IQueryable 上使用union
var reservations = context.Appointments.Include(e => e.Customer)
.Union(context.Reservations)
但我明白了
InvalidOperationException: '当执行一个集合操作时,两者 操作数必须具有相同的包含操作
虽然可以在内存中执行Union。我想执行一次可以节省一天的行程查询。如果那里只存在解决方案,我可能会迁移到 EntityFramework core 5。
【问题讨论】:
-
您的表架构是什么样的?继承和关系数据库通常不是很好的匹配。
-
这是一个表(每个层次结构的表)
-
@Flydog57 你从哪里得到的?继承被大量使用,例如使用微软身份等。EFCore 团队甚至在示例中展示了它。
-
@MHDuke 你期望结果是什么。
Iqueryable<Appointment>与Customer空的Reservation类型?还是别的什么? -
@JHBonarius 不,我希望这两种类型都有。当前仅查询基本类型的保留,将导致一组正确转换的两种类型。那就是说我的实验不彻底。我有更多信息调查并添加问题。 InvalidOperationException:“当前不支持对不同实体类型的设置操作(请参阅#16298)”在我删除 Include() 后
标签: c# entity-framework-core entity-framework-core-3.1