我有一个此类,其中包含对象ConversieDetail的列表
public class ConversieRun
{
[Key]
public String Guid { get; set; }
public String Naam { get; set; }
public String Status { get; set; }
public DateTime Start { get; set; }
public DateTime? Einde { get; set; }
public List<ConversieDetails> Details { get; set; }
}
使用以下方法,我需要返回一个包含ConversieDetails的ConversieRun列表
public List<PGData.ConversieRun> GetAll()
{
//var result = _context.CoversieDetails.ToList();
return _context.ConversieRun.ToList();
}
但是,当我返回上面的示例时,conversieDetail列表为null。 现在,当我取消注释结果列表时,conversieDetails列表将按预期方式填充在ConversieRun对象中。
如果我没有在另一个列表中首先获得ConversieDetails的列表的原因为何?
提前谢谢。
答案 0 :(得分:2)
默认情况下,实体中的关系不会加载,并且为null。您可以通过使用Include
来明确地告诉EF也加载相关实体:
_context.ConversieRun.Include(x => x.Details).ToList();
现在将加载所有ConversieRun
实体及其详细信息。
您可以在文档(https://docs.microsoft.com/en-us/ef/core/querying/related-data)的“加载相关数据”部分中详细了解此内容
此处的示例使用的是Explicit加载方法,您也可以选择使用Lazy加载方法,在其中请求相关实体时将其加载。但是,这会对数据库查询的数量产生负面影响,因为它将为每个ConversieRun
实体运行一个单独的查询以获取其详细信息。