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