在Entity Framework Core中自引用多對多關係

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

我正在使用Entity Framework Core(EF)來為項目構建模型。

現在我想保存公司和他們的層次結構。因此,我有以下情況:

  • 子公司(兒童)有任意數量的子女和任何數量的父母。
  • 母公司也有許多孩子和任何數量的父母。

多對多的反應幾乎不是問題。真正的問題是多對多和自引用(相同的表名)的組合。

我不知道如何用這些案例編寫模型。我希望任何人都可以幫助我。

熱門答案

在模型類(我的情況下的乘客,多個乘客可以與特定的一個乘客相關/鏈接..)定義如下關係:

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一對多關係:

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讀取任何Passenger的相關/鏈接行:

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合法嗎? 是的,了解原因