0

流暢な API を使用して、同じオブジェクトに対して 2 つの多対多の関係を定義しようとしています。

単純化されたモデルは次のとおりです。

public class PurchaseRequisition
{
    [Key, ForeignKey("Transaction")]
    public int TransactionId { get; set; }
    public virtual ICollection<People> RequisitionedBys { get; set; }
    public virtual ICollection<People> AuthorizedSignatures { get; set; }
}

public class People
{
    [Key]
    public string Id{ get; set; }
    public string FullName { get; set; }
    public virtual ICollection<PurchaseRequisition> PurchaseRequisitionsForRequisitionedBys { get; set; }
    public virtual ICollection<PurchaseRequisition> PurchaseRequisitionsForAuthorizedSignatures { get; set; }
}

流暢な API コードは次のとおりです。

modelBuilder.Entity<PurchaseRequisition>()
.HasMany(a => a.RequisitionedBys)
.WithMany(b => b.PurchaseRequisitionsForRequisitionedBys)
.Map(x =>
{
    x.MapLeftKey("PurchaseRequisitionId");
    x.MapRightKey("RequisitionedById");
        x.ToTable("PurchaseRequisitionRequisitionedBy");
});

modelBuilder.Entity<PurchaseRequisition>()
.HasMany(a => a.AuthorizedSignatures)
.WithMany(b =>b.PurchaseRequisitionsForAuthorizedSignatures)
.Map(x =>
{
    x.MapLeftKey("PurchaseRequisitionId");
    x.MapRightKey("AuthorizedSignatureId");
    x.ToTable("PurchaseRequisitionAuthorizedSignature");
});

私が望むのは、2 つの個別のリンク テーブルを生成することですが、EF が生成するのは、People テーブルの PurchaseRequisition に対する 2 つの外部キー列と、PurchaseRequisition フィールドの People に対する 1 つの外部キー列です。

誰が何が間違っているのか教えてもらえますか?

4

1 に答える 1

0

問題は修正されました。

モデル クラスに変更を加え、Initializer クラスが DropCreateDatabaseIfModelChanges を拡張したため、データベース初期化子コードがデータベースを削除して再作成すると誤解しました。

Slauma が示唆したように、モデルが変更されたにもかかわらず、流暢な API コードに到達していませんでした。SetInitializer() メソッドを使用して初期化子を設定していましたが、このコードは、DB にアクセスするために初めてコンテキスト インスタンスを使用したときにのみ実行されました。

于 2012-04-25T14:25:58.760 に答える