然后在EF Core中包含多对多

时间:2019-12-27 21:34:17

标签: database web .net-core entity-framework-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版。

我如何进行第一个查询来检索一个人的朋友,这是什么原因造成的?

0 个答案:

没有答案