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

それの何がいけないの?-それが多対多の方法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 に答える
1

おそらくあなたが何を意味するのかを理解するために、しばらく考えなければなりませんでした。PersonOrder.PersonIdと に一意でないインデックスがあることを意味していると思いますPersonOrder.OrderId

ただし、主キーに一意のインデックスがありますPersonOrder.PersonId + PersonOrder.OrderId。そして、それこそがユニークであるべき唯一のものです。個々のフィールドのインデックスが一意になることはありません。これは、関連付けが実際には多対多ではなく、1 対多であることを意味します。

それとも、あなたが求めているのは、1 (人) 対多 (注文) の関連付けですか? (ユニークな 付きPersonOrder.OrderId)。その場合、関連付けを通常の 1 対多:Person.OrdersおよびOrder.Person(単数) としてモデル化することもできます。

于 2013-05-18T23:31:47.230 に答える