如何使用 Entity Framework Code First 删除多对多自动生成的 table

How to remove Many to Many auto generated table with Entity Framework Code First

我有 3 个实体 产品供应商 & 合同、产品和供应商各有作为参考,彼此的集合创建了一个 ProductSupplier Table。

为了在这个多对多关系上添加额外的 属性,我创建了第三个实体 ProductForSupplier,其中包含 1 个产品、1 个供应商和一个额外的字符串 属性 产品编号。

此外,我还创建了另一个实体 ProductSupplierForContract,它包含一个 ProductForSupplier 和一个合同。当我播种一些数据进行测试时,我可以观察到 ProductSupplierForContract 没有产品和供应商 ID 值,而它们存在于我的 ProductForSupplier 实体中,但 ID 确实有记录的 ProductForSupplierId。

我如何删除 table ProductSupplierForContract 中的这 2 个属性,因为我有 table 的 ID 保存这 2 个值?

实体:

public class Product : BaseEntity // BaseEntity just holds an Id and a date
{
    public ICollection<ProductSupplierForContract> ProductSupplierForContracts { get; set; }
    public ICollection<ProductForSupplier> ProductForSuppliers { get; set; }
}

public class Supplier : BaseEntity
{
    public ICollection<ProductForSupplier> ProductForSuppliers { get; set; }
    public ICollection<ProductSupplierForContract> ProductSupplierForContracts { get; set; }
} 

public class Contract : BaseEntity
{
    public ICollection<ProductSupplierForContract> ProductSupplierForContracts { get; set; }
}

public class ProductForSupplier:BaseEntity
{
    public string ProductNumber{ get; set; }

    [Required]
    public Product Product { get; set; }

    [Required]
    public Supplier Supplier { get; set; }
}

public class ProductSupplierForContract: BaseEntity
{
    [Required]
    public ProductForSupplier ProductForSupplier { get; set; }

    [Required]
    public Contract Contract { get; set; }
}

播种方式

 protected override void Seed(TestDbContext context)
 {
     Supplier supplier1 = new Supplier("Microsoft");
     context.Suppliers.Add(supplier1);         

     Product product1 = new Product("test product 1");
     context.Products.Add(product1);

     Contract contract = new Contract("Contract 1");
     context.Contracts.Add(contract);

     ProductForSupplier pfs = new ProductForSupplier("123productNumber");
     pfs.Supplier = supplier1;
     pfs.Product = product1;        
     context.ProductForSuppliers.Add(pfs);

     ProductSupplierForContract psfc = new ProductSupplierForContract(pfs, contract);
     context.ProductSupplierForContracts.Add(psfc);

     base.Seed(context);
 }

傻我,

我删除了我的 SupplierProduct 实体中的 ProductSupplierForContract 引用,这给了我想要什么,因为这就是创造这些的原因。

在两个实体中删除了这一行:

public ICollection<ProductSupplierForContract> ProductSupplierForContracts { get; set; }