0

最初にEFコードを使用することに少し混乱しているシナリオがあります。私が作成したクラスは以下のとおりです。

public class Company
{
    public int Id { get; set; }
    public List<Contact> Contacts { get; set; }
    public List<Job> Jobs { get; set; }
}

public class Contact
{
    public int Id { get; set; }
    [ForeignKey("CompanyId")]
    public virtual Company Company { get; set; }
    public int CompanyId { get; set; }       
    public List<Job> Jobs { get; set; }
}

public class Job
{
    public int Id { get; set; }
    [ForeignKey("CompanyContactId")]
    public virtual CompanyContact CompanyContact { get; set; }
    public int CompanyContactId { get; set; }
    [ForeignKey("CompanyId")]
    public virtual Company Company { get; set; }
    public int CompanyId { get; set; } 
}    

ただし、DB をビルドすると、次のエラーが発生します。

テーブル 'Contacts' に FOREIGN KEY 制約 'FK_Contacts_Company_CompanyId' を導入すると、サイクルまたは複数のカスケード パスが発生する可能性があります。ON DELETE NO ACTION または ON UPDATE NO ACTION を指定するか、他の FOREIGN KEY 制約を変更します。

したがって、少し調査したところ、これに対する答えは Fluent API を使用して必要に応じてマッピングを定義することであることが示されていますが、これを行う方法や同様のシナリオの例を見つけることができません。

Job から Company クラスを削除して Contact をナビゲートできることはわかっていますが、可能であればそうしたくないと思います。

感謝して受け取った助け

4

1 に答える 1

0

EF モデル ビルダーを使用して、これらの関係を設定します。

プロパティの 1 つでこれを行う方法の例は次のとおりです。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Contact>().HasOptional(e => e.Company).WithMany(c=>c.Contacts);
    } 

モデルビルダーの使用方法に関する詳細については、EF ナビゲーション プロパティに関する私の記事をご覧ください。

于 2012-07-20T22:55:24.950 に答える