EF 返回的 FK collection 为空,但验证重复项,确认 collection 有内容

FK collection returned by EF is null, but validation for duplicates, confirms thats, the collection has content

我正在尝试获取所有用户无人机的数据,但 ef core 返回空 collection。

public class User : AuditableEntity
   {
       public Guid Id { get; set; }
       public string Name { get; set; }
       public string Email { get; set; }
       public string UserData { get; set; }
       public bool IsActive { get; set; }
       public bool IsAdmin { get; set; }
       public DateTime LastActivity { get; set; }
       public IEnumerable<Drone> Drones { get; set; }
   }
public class Drone : AuditableEntity
   {
       public Guid Id { get; set; }
       public string CustomName { get; set; }
       public string Model { get; set; }
       public int Serial { get; set; }       
       public bool IsActive { get; set; }
       public string DroneData { get; set; }
       public virtual User User { get; set; }
   }

user.Drones总是有空值,我无法获取和显示数据,但是这行验证代码

if (user.Drones.Contains(drone))
                    return ("This drone has been alredy registred", false);

告诉我,user.Drones 包含值。 为什么我应该这样做,得到 user.Drones collection?

Ef 使用延迟加载,加载子实例必须使用 Include

var user = context.Users.Where (i=> i.Id==userId)
.Include(i=>i.Drones)
.FirstOrDefault();

//or if you want just drones

var userDrones=context.Users.Where (i=> i.Id==userId)
.Select(i=>i.Drones)
.FirstOrDefault();

但最好给Drone显式添加一个外键UserId

public class Drone : AuditableEntity
   {
       public Guid Id { get; set; }
       .....

      public Guid UserId { get; set; }
       public virtual User User { get; set; }
   }

并使用此查询

var userDrones=context.Drones.Where (i=> i.UserId==userId).ToList();