在我们的EF 6 Code第一个应用程序中,我们在非跟踪方案中遇到导航属性问题。
要求是:
错误消息
当使用NoTracking合并选项返回对象时,只能在EntityCollection或EntityReference不包含对象时调用Load。
在代码中,它看起来像这样(未经测试的例子,应该演示必要的部分):
public class A
{
public virtual ICollection<B> NavigateToB { get; set; }
}
public class B
{
public virtual A NavigateToA { get; set; }
}
public class AMap : EntityTypeConfiguration<A>
{
public AMap()
{
this.HasMany(a => a.NavigateToB)
WithRequired(b => b.NavigateToA);
}
}
public class BMap : EntityTypeConfiguration<B>
{
public BMap()
{
this.HasRequired(b => b.NavigateToA)
.WithMany(a => a.NavigateToB);
}
}
//Sample
var query= ARepository.GetQuery();
var a= query.AsNoTracking().FirstOrDefault();
var b = a.NavigateToB.FirstOrDefault();
var a2 = b.NavigateToA; //Here the error is thrown
代理对象可以正常工作 - 我可以使用多层次的navigatio属性。当我使用上述异常导航导航属性时,会出现唯一的问题。 这几乎就像第一次使用导航链接已将项目存储在集合中,但未将引用标记为已加载。
有没有什么可以做的 - 如果没有标记为已加载,可能会在延迟加载之前通过反射清除集合?