【问题标题】:Self-referencing many to many relation in Entity Framework CoreEntity Framework Core 中的自引用多对多关系
【发布时间】:2017-02-27 21:45:46
【问题描述】:

我正在使用 Entity Framework Core (EF) 为项目构建模型。

现在我想拯救公司及其等级制度。 因此我有以下情况:

  • 子公司(子)有任意数量的子和任意数量的父。
  • 母公司有任意数量的子代和任意数量的父代。

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

我不知道如何用这些情况编写模型。我希望任何人都可以帮助我。

【问题讨论】:

  • 为什么你不能处理 M:M ? self-referencing (same table name)是什么意思
  • 到目前为止,我还没有找到使用 EF 核心的方法。使用自引用(相同的表名)我的意思是,realtion(公司)中的两个实体都是同一个表/模型/实体
  • 您是否需要知道如何处理 M : M 与 EF 核心或其他?您必须提供更多信息。否则我们如何为您提供帮助?你的型号代码是什么?
  • 我知道如何处理 m:m 关系。在自我引用的情况下,我的方法不起作用,因为实体是相同的
  • 你能把你的模型的代码放上去吗?

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


【解决方案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 一对多关系:

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

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2021-04-09
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多