1

データベースに必要な正しい関係を設定する際にいくつかの問題があります。

一言で言えば、複数(ゼロ:多数)の支店を持つことができる会社が欲しい

会社で、支店テーブルに存在する本社を指定できるようにしたい(0:1)

私が期待していたのは、Firmテーブルに次のフィールドがあることです: Id、Name、HeadOfficeId、およびブランチ上にあると予想されるフィールド: Id、TradingAs、Name、Firm_Id

代わりに、次のように表示されます。

次のフィールドを持つテーブルを確定します: Id、Name、HeadOfficeId

予想されるブランチ: Id、TradingAs、Name、Firm_Id、Firm_Id1

モデル クラスは次のとおりです。

public class Firm
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Branch> FirmBranches { get; set; }

    public virtual LawFirmBranch HeadOffice { get; set; }
}

public class Branch
{
    public int Id { get; set; }
    public string TradingAs {get;set;}
    public string Name {get;set;}


    public Firm Firm { get; set; }

}

これにより循環参照型の問題が発生することを理解しており、FirmBranches プロパティに値が存在するまで、Firm HeadOffice を最初は Null にすることができて満足しています。

本社が null または 1 つのタイプの関係を持っていることを指定できる方法はありますか

4

1 に答える 1

1

モデルでこれを明示的に実行したい場合は、データ注釈を介してこれを実行できます。

public class Firm {public int Id {get; セットする; } public string Name {get; セットする; }

public virtual ICollection<Branch> FirmBranches { get; set; }

[ForeignKey("HeadOffice")]
public int? FirmId {get;set;}

public virtual LawFirmBranch HeadOffice { get; set; }

}

これをコードで公開したくない場合は、流暢にこれを行う必要があります。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Firm>()
            .HasOptional(f => f.HeadOffice)
            .WithOptionalDependent();
    }

これにより、次のものが作成されます。

ここに画像の説明を入力してください

キーの名前を変更する場合は、流暢なマップの最後にマッピングを追加します。

        modelBuilder.Entity<Firm>()
            .HasOptional(f => f.HeadOffice)
            .WithOptionalDependent()
            .Map(m => m.MapKey("YourKeyName"));
于 2012-09-05T16:02:20.533 に答える