首先在EF代码中关于多对多关系的问题

时间:2011-09-03 04:01:22

标签: c# entity-framework-4.1 ef-code-first

我有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成为我的连接表中的主键。

1 个答案:

答案 0 :(得分:1)

您无法解决数据库的问题。您通常需要一些额外的唯一列作为联结表的主键,或者您需要一些附加数据列来形成CustomerIdProductId的复合键。这将导致您的模型发生变化。您需要expose junction table as an entity - CustomerProduct个实体必须与新实体相关。

也许你无论如何都需要这个。没有任何额外数据,这种关系并不常见。也许您的模型需要更大的变化。例如,客户跟踪系统通常使用某种形式的实体,如Customer,Order,OrderItem,Product,因此Customer和Product之间没有直接关系。