首页 > 解决方案 > 然后在 EF Core 中包含多对多

问题描述

我有以下表格:

public class Parent
  {
    [Key]
    public long Id { get; set; }

    [ForeignKey("ParentId")]
    public List<Person> Persons { get; set; }
  }
public class Person
  {
    [Key]
    public long Id { get; set; }

    public long ParentId { get; set; }

    [ForeignKey("PersonId")]
    public List<Friend> Friends { get; set; }
  }
public class Friend
  {
    public long PersonId { get; set; }

    public long FriendId { get; set; }

    [ForeignKey("FriendId")]
    public Person Friend { get; set; }
  }

Friend 表是 Person 表的两行之间的多对多关系。它有一个由 PersonId 和 FriendId 组成的 PK,声明如下:

modelBuilder.Entity<Friend>(entity =>
      {
        entity.HasKey(e => new { e.PersonId, e.FriendId });
      });

modelBuilder.Entity<Friend>()
        .HasOne(e => e.Friend)
        .WithMany()
        .OnDelete(DeleteBehavior.Restrict);

我想让所有的父母和所有人以及他们所有的朋友在一起,看起来像这样:

var entities = context.Parents
        .AsNoTracking()
        .Include(c => c.Persons)
        .ThenInclude(i => i.Friends)
        .ToList();

但是,这不会从 Friends 表中获取数据。

如果我在没有父母的情况下将朋友包括在人员查询中,则可以:

var entities = context.Persons
        .AsNoTracking()
        .Include(i => i.Friends)
        .ToList();

我正在使用 EF Core 2.2 版。

如何进行第一个查询以检索一个人的朋友以及导致这种行为的原因?

标签: databaseweb.net-coreentity-framework-core

解决方案


推荐阅读