Entity Frameworkコアでの多対多リレーションの自己参照

c# entity-framework-core many-to-many self-referencing-table visual-studio-2015

質問

私はプロジェクトのモデルを構築するためにEntity Framework Core(EF)を使用しています。

今私は企業とその階段を救いたい。したがって、次のような場合があります。

  • 子会社(子)には、任意の数の子どもと任意の数の親があります。
  • 親会社には、任意の数の子供と任意の数の親がある。

何千もの反逆はほとんど問題ではありません。実際の問題は、多対多の組み合わせと自己参照型(同じテーブル名)です。

私はこれらのケースでモデルを書く方法を知らない。私は誰も私を助けることができれば嬉しいです。

人気のある回答

モデルクラス(複数の乗客が特定の1人の乗客に関連/リンクすることができる私の場合の旅客)。以下のように関係を定義します。

Passenger.cs

public int? LinkedToPassengerId { get; set; }
[ForeignKey("LinkedToPassengerId")]
public virtual Passenger LinkedToPassenger { get; set; }
public virtual ICollection<Passenger> Passengers { get; set; }

次に、 DBContextクラスで、次のFluent APIを使用して、 OnModelCreatingメソッド内のSelf-Ref one-to-many関係を定義します。

modelBuilder.Entity<Passenger>() <BR>
    .HasMany(e => e.Passengers) <BR>
    .WithOne(e => e.LinkedToPassenger) //Each passenger points back to his parent Passenger
    .HasForeignKey(e => e.LinkedToPassengerId);

最後に、任意のコントローラメソッドから、次のLINQを使用して、旅客の関連/リンクされた行を読み取ることができます。

var linkPasses = new List<Passenger>();
var Passes = _context.Passengers.Include(c => c.Passengers).Where(m => m.ID == id); 
foreach(Passenger tmpPass in Passes)
    foreach(Passenger tmpPass2 in tmpPass.Passengers) 
       linkPasses.Add(tmpPass2);**


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ