我正在使用 Entity Framework Core (EF) 为项目构建模型。
现在我想拯救公司和他们的等级制度。因此我有以下情况:
- 子公司(子)有任意数量的子和任意数量的父。
- 母公司有任意数量的孩子和任意数量的父母。
多对多反应几乎不是问题。真正的问题是多对多和自引用(相同的表名)的组合。
我不知道如何用这些案例编写模型。我希望任何人都可以帮助我。
我正在使用 Entity Framework Core (EF) 为项目构建模型。
现在我想拯救公司和他们的等级制度。因此我有以下情况:
多对多反应几乎不是问题。真正的问题是多对多和自引用(相同的表名)的组合。
我不知道如何用这些案例编写模型。我希望任何人都可以帮助我。
在模型类(在我的情况下为乘客,其中多个乘客可以关联/链接到特定的一个乘客..)定义如下关系:
乘客.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);**