C# 在实体框架4中填充外键对象

C# 在实体框架4中填充外键对象,c#,entity-framework-4,C#,Entity Framework 4,我第一次使用EntityFramework,也许这个问题很简单…我使用了代码优先的方法..我有一个类人员,看起来像这样: 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 Ti

我第一次使用EntityFramework,也许这个问题很简单…我使用了代码优先的方法..我有一个类人员,看起来像这样:

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; }
}
以及职位类别:

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

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

}
如果我把表达式改成这个,外键对象就不再是null了

 Context.ContextInstance.Personnels.Include("Title").ToList();
这是正确的方法吗???。有没有更好的方法???。我想EF会自动理解的!!!!。。如果有超过1个FK,那么我必须对所有FK使用Include??请帮助我理解


谢谢

如果您的
JobTitle
属性将被定义为
virtual
,您就不需要使用include


这里的解释非常好:

这是由于延迟加载。调用
Context.ContextInstance.Personnels.ToList()时这将获取所有人员的标题,但标题在实例化之前不会获取,因此,请将其设置为虚拟以获取标题

或者,您可以通过以下方式禁用延迟加载:

public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext") {
     this.Configuration.LazyLoadingEnabled = false;
}
这样做将从上下文中获取所有相关数据。当您指定要查询的属性时,使用“包含”是按需加载

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

可能重复的
public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext") {
     this.Configuration.LazyLoadingEnabled = false;
}