如何使用 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);
}
傻我,
我删除了我的 Supplier 和 Product 实体中的 ProductSupplierForContract 引用,这给了我想要什么,因为这就是创造这些的原因。
在两个实体中删除了这一行:
public ICollection<ProductSupplierForContract> ProductSupplierForContracts { get; set; }
我有 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);
}
傻我,
我删除了我的 Supplier 和 Product 实体中的 ProductSupplierForContract 引用,这给了我想要什么,因为这就是创造这些的原因。
在两个实体中删除了这一行:
public ICollection<ProductSupplierForContract> ProductSupplierForContracts { get; set; }