2016-11-21 86 views
1

我有这样的实体:实体框架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); 

正确的项目被检索,但在获取的项目财产Applicationnull

我应该怎么做才能找到具有表达式的项目,并且仍然会自动加载导航属性?

回答

1

您需要将其加载到您的查询中才能加载它。这被称为急切加载。当你访问它

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

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

如果你只是想要这个特定的属性被加载而没有include,如上所示,你可以使属性不是虚拟的。

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

0

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

您的控件等待收集来。

单值不是只有单个值的集合;

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