Как удалить автоматически сгенерированную таблицу «многие ко многим» с помощью Entity Framework Code First - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть 3 сущности Продукт , Поставщик & Контракт , каждый из которых Продукт и Поставщик имеют в качестве ссылки Коллекцию друг друга, которая создает Таблицу ProductSupplier.

Чтобы добавить дополнительное свойство в это отношение «многие ко многим», я создал 3-ю сущность ProductForSupplier , которая содержит 1 Product, 1 Supplier и дополнительную строку PropertyNumber Product.

Кроме того, я создал еще одну сущность ProductSupplierForContract , которая содержит ProductForSupplier & Contract.Когда я заполняю некоторые данные для тестирования, я могу заметить, что ProductSupplierForContract не имеет значения Product & Идентификатор поставщика, хотя они присутствуют в моем объекте ProductForSupplier, но у id действительно есть ProductForSupplierId записи.

Как я могуудалить эти 2 свойства в таблице ProductSupplierForContract, так как у меня есть идентификатор таблицы, содержащей эти 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);
 }

1 Ответ

0 голосов
/ 12 декабря 2018

Глупый я,

Я удалил ссылку ProductSupplierForContract в моем Поставщике & Продукте Сущность, и это дало мне то, что я хочу с тех порэто было то, что создало это.

Удалена эта строка в обеих сущностях:

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