如何正确使用EF Core不为每个派生类型创建新的结表?

问题描述 投票:0回答:1

我目前在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组成的商店。

谢谢你的帮助。

c# database entity-framework entity-framework-core
1个回答
0
投票

解决方案是为每个派生类型创建一个不同的结表。在hibernate中,它会自动做到这一点,在EF Core(3.0)中,你仍然有义务自己做这件事。

© www.soinside.com 2019 - 2024. All rights reserved.