我有Products表和Customers表。因此,它们之间存在着多对多的关系。这是我使用ModelBuilder创建该关系的代码:
modelBuilder.Entity<Customer>().
HasMany(c => c.ProductsPurchased).
WithMany(p => p.Customers).Map(m =>
m.MapLeftKey("CustomerId").
MapRightKey("ProductId").
ToTable("CustomersXProducts"));
这里的问题是Join表包含CustomerId和ProductId的主键。这实质上意味着一个客户只能购买一次相同的产品。我该如何解决这个问题?我不希望CustomerId成为我的连接表中的主键。
答案 0 :(得分:1)
您无法解决数据库的问题。您通常需要一些额外的唯一列作为联结表的主键,或者您需要一些附加数据列来形成CustomerId
和ProductId
的复合键。这将导致您的模型发生变化。您需要expose junction table as an entity - Customer
和Product
个实体必须与新实体相关。
也许你无论如何都需要这个。没有任何额外数据,这种关系并不常见。也许您的模型需要更大的变化。例如,客户跟踪系统通常使用某种形式的实体,如Customer,Order,OrderItem,Product,因此Customer和Product之间没有直接关系。