EF Core中TPT继承报错“无法将Seller转换为Buyer”的原因?
问题原因分析
这个错误的核心原因是EF Core的TPT继承模型中,一个Contact实例只能属于一个派生类(Buyer或Seller),但你的数据存在交叉引用的非法关联:
- 第一条插入语句中,
SellerId=7113说明ID为7113的Contact记录对应Seller表数据(是卖家);BuyerId=7221说明ID为7221的Contact对应Buyer表数据(是买家)。 - 第二条插入语句中,你将
BuyerId=7113——也就是把一个实际是Seller的Contact实例当作Buyer关联到了Sales记录里。
当EF Core执行context.Sales.Include(x => x.Buyer).Include(s => s.Seller)查询时,会触发类型转换错误:
- 加载第二条
Sales的Buyer时,EF Core找到ID=7113的Contact,发现该记录仅在Seller表中存在,因此实例化了Seller对象。 - 但EF Core需要将这个
Seller对象赋值给Sales的Buyer属性(类型为Buyer),强制类型转换直接触发了Unable to cast object of type 'Seller' to type 'Buyer'错误。
本质是你的数据违反了TPT继承的约束:一个Contact不能同时是Buyer和Seller,而第二条插入语句的关联逻辑打破了这个规则。
内容的提问来源于stack exchange,提问作者Bradley Plett
相关产品推荐
相关产品推荐

