0

我有一个表 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; }
}
4

2 回答 2

1

我不得不想了一会儿才能明白你的意思PersonOrder.PersonId我认为您的意思是和上有非唯一索引PersonOrder.OrderId

但是主键上有一个唯一索引PersonOrder.PersonId + PersonOrder.OrderId。这是唯一应该是独一无二的。各个字段的索引永远不会是唯一的。这意味着该关联实际上不是多对多,而是一对多。

或者这就是您所追求的:拥有 1(人)对多(订单)关联?(具有独特性PersonOrder.OrderId)。在这种情况下,您不妨将关联建模为常规的 1 对多:Person.OrdersOrder.Person(单数)。

于 2013-05-18T23:31:47.230 回答
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);
于 2013-05-18T21:37:53.867 回答