Entity Framework 6 и свободный API-интерфейс «многие ко многим» с явной таблицей соединений - PullRequest
0 голосов
/ 30 января 2020

TL; DR; Я не могу определить явное отношение «многие ко многим» и правильно объявить таблицу соединений, используя EF6 и Fluent API


В моей winform проект Я пытаюсь построить отношение «многие ко многим». Мне нужно объявить таблицу соединений , чтобы я мог добавить к ней свойства.

Так вот, что я ожидаю: Expected Result

У меня есть следующие классы:

 class Product
    {
        [Key]
        public long Id { get; set; }

        [Required]
        public String ProductName { get; set; }


        public Decimal Cost { get; set; }

        public ICollection<ProductReceipt> ProductsPerReceipt { get; set; }
    }

class ProductReceipt
{
    public long ReceiptId { get; set; }
    public Receipt Receipt { get; set; }


    public long ProductId { get; set; }
    public Product Product { get; set; }

    [Required]
    public int Amount { get; set; }
}

class Receipt
{
    [Key]
    public long Id { get; set; }

    [Required]
    public String CustomerName { get; set; }

    [Required]
    public DateTime TransactionDate { get; set; }

    public ICollection<ProductReceipt> ProductsPerReceipt { get; set; }
}

Лог c является то, что квитанция может иметь много продуктов, и мы должны отслеживать, сколько продуктов покупается.

Используя Fluent API, я объявил несколько отношений «один ко многим». Но у меня возникли проблемы с явным отношением «многие ко многим».

Я попробовал следующее:

class AppDbContext : DbContext
{
    public AppDbContext() : base("name=appConn") { }

    public DbSet<Product> Products { get; set; }
    public DbSet<ProductReceipt> ProductReceipts { get; set; }
    public DbSet<Receipt> Receipts { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //Declare the composite Id
        modelBuilder.Entity<ProductReceipt>()
            .HasKey(table => new { table.ProductId, table.ReceiptId });

        //Should create the left one-to-many relationship
        modelBuilder.Entity<ProductReceipt>()
            .HasRequired<Product>(prore => prore.Product)
            .WithMany(prod => prod.ProductsPerReceipt)
            .HasForeignKey<long>(prore => prore.ProductId);

        //Should create the right one-to-many relationship
        modelBuilder.Entity<ProductReceipt>()
            .HasRequired<Receipt>(prore => prore.Receipt)
            .WithMany(prod => prod.ProductsPerReceipt)
            .HasForeignKey<long>(prore => prore.ReceiptId);

    }


}

Но после миграции и обновления базы данных я получаю следующее: Database Result

...