2012-04-23 8 views
0

私は流暢なAPIを使用して同じオブジェクトに2対多の関係を定義しようとしています。ここでEntity Framework、Fluent 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が発生すると、2つの外部キーでありますPeopleテーブルのPurchaseRequisitionへの列と、PurchaseRequisitionフィールドのPeopleへの1つの外部キー列。

何が間違っているか教えていただけますか?

+1

マッピングが正しいように見えます。 modelBuilderコードに到達したことをデバッガにチェックインしましたか? – Slauma

+0

私はチェックして、私のコードに到達していないようです。 – ljustin

+0

モデルはDB-FirstまたはModel-Firstから来ていますか?特に、接続文字列にEDMメタデータセクションが含まれていますか?もしそうなら、それを削除して(メタデータセクションなしの単純な接続文字列を使用して)コードファーストで作業する必要があります。そうしないと、 'OnModelCreating'はまったく呼び出されません。 – Slauma

答えて

0

問題は修正されました。

私は誤って、データベースクラスを変更してInitializeクラスを変更してからデータベースの初期化コードがデータベースを削除して再作成すると思いましたが、DropCreateDatabaseIfModelChangesを拡張しました。

Slaumaが提案したように、モデルが変更されても流暢なAPIコードには達していませんでした。私はSetInitializer()メソッドを使ってイニシャライザを設定していました。このコードは、DBにアクセスするために初めてコンテキストインスタンスを使用したときにのみ実行されます。

関連する問題