实体框架核心中的自引用多对多关系

本文关键字:关系 自引用 框架 核心 实体 | 更新日期: 2023-09-27 18:13:28

我正在使用实体框架核心(EF)为项目构建模型。

现在我想拯救公司和他们的等级制度。因此,我有以下情况:

  • 子公司(Child)有任意数量的子女和任意数量的父母。
  • 母公司有任意数量的子女,也有任意数量的父母。

多对多的关系不是问题。真正的问题是多对多和自引用(相同的表名)的组合。

我不知道如何用这些情况写一个模型。我希望任何人都能帮助我。

实体框架核心中的自引用多对多关系

在模型类(乘客在我的情况下,多个乘客可以关联/链接到一个特定的乘客..)定义如下关系:

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读取任何乘客的相关/链接行:

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);**