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

本文关键字:关系 问题 EF 代码 | 更新日期: 2023-09-27 18:07:18

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

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

无法解决数据库的问题。通常需要一些额外的唯一列作为连接表的主键,或者需要一些额外的数据列与CustomerIdProductId组成复合键。这将导致你的模式发生变化。您需要将连接表作为实体公开—CustomerProduct实体必须与新实体相关。

也许你会需要这个。在没有任何附加数据的情况下得到这种关系是不太常见的。也许你的模式需要更大的改变。例如,客户跟踪系统通常使用某种形式的实体,如customer、Order、OrderItem、Product,因此在customer和Product之间没有直接的关系。