EF Code First不返回相关对象

时间:2010-11-19 04:54:57

标签: entity-framework ef-code-first

我使用EF Code First和预先存在的数据库。

两个对象:

public Foo
{
    public int FooId {get;set;}
}

public Bar
{
    public int BarId {get;set;}
    public virtual Foo Foo {get;set;}
}

FooIdBarId都是数据库中的主键,Bar表的列FooId是指向{{1}的外键} table。

当我选择Foo时,Bar是空引用。我原以为EF会自动把它们中的两个拉到一起,但也许我错过了什么?

数据库映射:

Foo

2 个答案:

答案 0 :(得分:2)

如果你对Foo的期望不应该为null,那就是你在Bar对象上做了虚拟的事实,那就不是这样了。通过使它们成为虚拟,您只需选择加入EF延迟加载,它将为null,直到您通过在Bar对象上访问它来明确要求它为止。除此之外,如果您希望预先填充它,则必须使用 Include 方法急切加载它。

要显式禁用延迟加载,您可以使用以下代码,即使您不需要它,因为您只需从导航属性中删除虚拟关键字,延迟加载就会消失。 / p>

public EFCodeFirst()
{        
    this.ObjectContext.ContextOptions.LazyLoadingEnabled = false;
}

在内部,DbContext使用 protected ObjectContext,您也可以在继承的DbContext类中使用它(例如EFCodeFirst)。

答案 1 :(得分:0)

你在Foo类中缺少一行,Foo包含一个Bar的集合。