PostgreSql EF,查询时导航属性始终为null

时间:2015-04-01 17:42:21

标签: entity-framework postgresql

在使用Entity Framework和PostgreSql时,我偶然发现了意外行为。

当我在where子句中查询带有导航属性的上下文时,它始终为null并且失败。但是,如果我添加指向导航属性的Include方法,它正在工作

这将起作用

context.Garages.Include("PostalCode").Where(f=>f.PostalCode.RegionId == regionId)

这不会(PostalCode为null并且在NullReference上失败)

context.Garages.Where(f=>f.PostalCode.RegionId == regionId)

我不认为在使用MSSQL时我必须将其添加到查询中。 anybdoy可以向我解释一下。

1 个答案:

答案 0 :(得分:0)

如果您希望导航属性为lazy loaded,则需要将其声明为virtual

public Garage
{
 //...
 public virtual PostalCode PostalCode {get;set;} 
}

在此link中,如果要为实体启用延迟加载,并且在发生更改时让实体框架跟踪类中的更改,您将找到必须遵循实体的条件。

如果该导航属性已经是virtual,我认为可能导致该行为的另一个选项是您在上下文中关闭延迟加载:

public class YourContext : DbContext 
{ 
   public YourContext() 
   { 
     this.Configuration.LazyLoadingEnabled = false; 
   } 
}

如果调用Include方法,则要将相关实体作为查询的一部分加载。此加载行为称为Eager Loading。另一方面,如果您使用延迟加载,则相关实体将在第一次访问时加载,这是您要查找的行为。