我是第一次使用 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; }
}
和 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 会自动理解!!!!..如果有超过 1 个 FK,那么我必须对所有使用 Include他们中的??请帮助我理解。
谢谢
最佳答案
这是由于延迟加载。当您调用 Context.ContextInstance.Personnels.ToList();
时,这将获取所有人员的信息,但 Title 在实例化之前不会获取,因此请将其虚拟化以获取它。
或者,您可以通过
禁用延迟加载public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext") {
this.Configuration.LazyLoadingEnabled = false;
}
这样做将从上下文中获取所有相关数据。当您指定要查询的属性时,使用“include”是按需加载。
Virtual 关键字允许 Entity Framework 运行时为您的实体类及其属性创建动态代理,并由此支持延迟加载。没有虚拟,将不支持延迟加载,并且您在集合属性上得到 null。
关于c# - 在 Entity Framework 4 中填充外键对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17962624/