在Entity Framework 4中填充外键对象

9

我第一次使用 EntityFramework,也许这个问题太简单了... 我已经使用了 Code First 方法... 我有一个类 Personnel,看起来像这样:

public class Personnel
{

    public string Id { set; get; }
    public int Code { set; get; }
    public string Name { set; get; }
    public int Type { set; get; }

    public JobTitle Title { set; get; }
}

以及JobTitle类:

public class JobTitle
{
    public string Id { set; get; }
    public int Number { set; get; }
    public string Title { set; get; }

    public List<Personnel> Personnels { set; get; }

}

人员类别中的最后一个属性是课程表中人员表的外键。我的问题是,当我想使用lambda表达式从数据库检索所有人员(或一个人员)时,外键对象为空。lambda表达式如下:

Context.ContextInstance.Personnels.ToList();

如果我将表达式更改为这个,外键对象就不再为空。

 Context.ContextInstance.Personnels.Include("Title").ToList();

这是正确的方法吗?还有更好的方法吗?我以为EF会自动理解!!如果有多个外键,我需要同时使用Include吗?请帮助我理解。

谢谢


2个回答

7
这是由于懒加载造成的。当您调用 Context.ContextInstance.Personnels.ToList(); 时,它将获取所有人员,但是标题直到被实例化才会被获取,因此将其设置为虚拟以获取它。
或者,您可以通过以下方式禁用懒加载:
public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext") {
     this.Configuration.LazyLoadingEnabled = false;
}

这样做将从上下文中获取所有相关数据。使用“include”是按需加载,当您指定要查询的属性时。

虚拟关键字允许实体框架运行时为您的实体类及其属性创建动态代理,从而支持延迟加载。如果没有使用虚拟关键字,则无法支持延迟加载,并且集合属性将返回null。


6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接