我有一个表Person,Order和PersonOrder。
在表PersonOrder中,我有一个PersonId和OrderId列。
如何在这些列之间使用unique index
创建Fluent API
?
这是我的尝试:
modelBuilder.Entity<PersonOrder>()
.HasKey(l => new { l.PersonId , l.OrderId});
[Table("PersonOrder")]
public class PersonOrder
{
public int PersonId { get; set; }
public int OrderId{ get; set; }
public virtual Person Person { get; set; }
public virtual Order Order { get; set; }
}
答案 0 :(得分:1)
这有什么问题? - 这是多对多composite index
的方式......
我将发布完整的示例,通常对所有列(以及您可能已经拥有的典型导航属性)进行多次或多次映射(
)modelBuilder.Entity<PersonOrder>()
.HasKey(x => new { x.PersonId, x.OrderId });
modelBuilder.Entity<PersonOrder>()
.HasRequired(x => x.Person)
.WithMany(x => x.PersonOrders)
.HasForeignKey(x => x.PersonId)
.WillCascadeOnDelete(false);
modelBuilder.Entity<PersonOrder>()
.HasRequired(x => x.Order)
.WithMany(x => x.PersonOrders)
.HasForeignKey(x => x.OrderId)
.WillCascadeOnDelete(false);
答案 1 :(得分:1)
我不得不考虑一段时间来获得你可能的含义。我认为您的意思是PersonOrder.PersonId
和PersonOrder.OrderId
上存在非唯一索引。
但 是主键PersonOrder.PersonId + PersonOrder.OrderId
上的唯一索引。这是唯一应该是唯一的东西。各个字段的索引永远不会是唯一的。这意味着该协会实际上并不是多对多,而是一对多。
或者你所追求的是:拥有1(人)到多(订单)协会? (使用唯一的PersonOrder.OrderId
)。在这种情况下,您也可以将关联建模为常规的1到多个:Person.Orders
和Order.Person
(单数)。