实体框架6延迟加载问题

时间:2016-11-21 23:50:34

标签: c# entity-framework entity-framework-6

我有这个实体:

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

如何查找带有表达式的项目并且仍然自动加载导航属性?

2 个答案:

答案 0 :(得分:1)

您需要通过将其包含在查询中来加载它。这被称为渴望加载。

_context.Set<Crash>().Include(x => x.Application).First(expression);

您也可以关闭延迟加载,并在访问时加载导航属性。但请记住,这可能会导致性能问题。关闭延迟加载将产生全局影响。

如果您只想加载此特定属性而没有上面显示的include,则可以使该属性不是虚拟的。

Here是有关延迟加载等的更多信息的链接。

答案 1 :(得分:0)

First()仅返回一个单独的值,而不是集合。与ToList()不同。

你的控制等待收集来。

单个值不是仅包含单个值的集合;

您需要使用First()返回值的一条记录创建一个集合。 这将是一个记录列表。