我有这个实体:
public class Crash : BaseModel
{
public string Message { get; set; }
public DateTime Time { get; set; }
public int ApplicationId { get; set; }
public virtual Application Application { get; set; }
}
以下作品完美且导航属性Application
正确无误:
_context.Set<T>().ToList();
但是那些没有填写Application
:
_context.Set<T>().First(expression);
检索到正确的项目,但在获取的项目属性Application
中为null
。
如何查找带有表达式的项目并且仍然自动加载导航属性?
答案 0 :(得分:1)
您需要通过将其包含在查询中来加载它。这被称为渴望加载。
_context.Set<Crash>().Include(x => x.Application).First(expression);
您也可以关闭延迟加载,并在访问时加载导航属性。但请记住,这可能会导致性能问题。关闭延迟加载将产生全局影响。
如果您只想加载此特定属性而没有上面显示的include,则可以使该属性不是虚拟的。
Here是有关延迟加载等的更多信息的链接。
答案 1 :(得分:0)
First()仅返回一个单独的值,而不是集合。与ToList()不同。
你的控制等待收集来。
单个值不是仅包含单个值的集合;
您需要使用First()返回值的一条记录创建一个集合。 这将是一个记录列表。