我目前在EntityFrameworkCore中有一个继承结构,它看起来是这样的。
产品为基类
在这个产品下面可以有很多产品。例如一个CellPhone.这个CellPhone在许多商店里销售。我们把这个结表叫做:cellphone_shop。
public class CellPhoneShop {
public int CellPhoneId;
public CellPhone CellPhone;
public int ShopId;
public Shop Shop;
}
在Entity Framework Core中,我希望放一些类似的东西。
modelBuilder.Entity<CellPhoneShop>()
.HasOne(x => x.CellPhone)
.WithMany(x => x.CellPhoneShops)
.HasForeignKey(x => x.CellPhoneId);
modelBuilder.Entity<CellPhoneShop>()
.HasOne(x => x.Shop)
.WithMany(x => x.CellPhoneShops)
.HasForeignKey(x => x.ShopId);
但是想象一下,还有另外两个产品的情况: 一台笔记本电脑和一台iPad。Laptop也在许多商店里销售,iPad则没有。
它是如何创建一个连接表ProductShop使用Entity框架核心?
我开始是这样的。
public class ProductShop {
public int ProductId;
public Product Product;
public int ShopId;
public Shop Shop;
}
用下面的EF映射。
modelBuilder.Entity<ProductShop>()
.HasOne(x => x.Shop)
.WithMany(x => x.ProductShops)
.HasForeignKey(x => x.ShopId);
modelBuilder.Entity<ProductShop>()
.HasOne(x => x.Product)
.WithMany(??????????)
.HasForeignKey(x => x.ProductId);
'WithMany'属性不能被填充的'x.ProductShops',因为只有派生成员Laptop和CellPhone组成的商店。
谢谢你的帮助。
解决方案是为每个派生类型创建一个不同的结表。在hibernate中,它会自动做到这一点,在EF Core(3.0)中,你仍然有义务自己做这件事。