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();
我正在尝试获取所有用户无人机的数据,但 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();