TL; DR; Я не могу определить явное отношение «многие ко многим» и правильно объявить таблицу соединений, используя EF6 и Fluent API
В моей winform проект Я пытаюсь построить отношение «многие ко многим». Мне нужно объявить таблицу соединений , чтобы я мог добавить к ней свойства.
Так вот, что я ожидаю:
У меня есть следующие классы:
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);
}
}
Но после миграции и обновления базы данных я получаю следующее: