代码之家  ›  专栏  ›  技术社区  ›  Dimitri

如何先用实体框架代码删除多对多自动生成的表

  •  1
  • Dimitri  · 技术社区  · 7 年前

    我有3个实体 产品 , 供应商 合同

    为了在这个多对多关系上添加额外属性,我创建了第三个实体 供应商产品

    此外,我还创建了另一个实体 该公司持有供应商的产品;合同。当我为测试播种一些数据时,我可以观察到ProductSupplierForContract没有该产品&供应商Id值,而它们存在于我的ProductForSupplier实体中,但Id具有记录的ProductForSupplierId。

    既然我有保存这两个值的表的Id,如何删除表ProductSupplierForContract中的这两个属性?

    实体:

    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);
     }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Dimitri    7 年前

    我真傻,

    我取下了钥匙 合同产品供应商 在我的 产品 实体给了我我想要的,因为正是这个创造了这些。

    删除了两个实体中的此行:

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