繁体   English   中英

在实体框架中填写外键对象4

[英]Filling Foreign Key Object in 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 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; }

}

其中Personnel Class中的最后一个属性当然是人员表中的外键。我的问题是当我想使用lambda表达式从DB检索所有人员(或人员)时...外键对象为空... lambda表达式如下:

Context.ContextInstance.Personnels.ToList();

如果我将表达式更改为this,则外键对象不再为null。

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

它是正确的方法?? ..有没有更好的方法?? ..我认为EF会自动理解!!!! ..如果有超过1 FK那么我必须使用Include为所有这些? ? 请帮我理解。

谢谢

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

这里解释得非常好: 实体框架4.1虚拟属性

这是由于延迟加载。 当你调用Context.ContextInstance.Personnels.ToList(); 这将获取所有人员,但Title在获取实例之前不会获取,因此将其设为虚拟以获取它。

或者,您可以通过禁用延迟加载

public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext") {
     this.Configuration.LazyLoadingEnabled = false;
}

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

虚拟关键字允许实体框架运行时为您的实体类及其属性创建动态代理,并通过该支持延迟加载。 如果没有虚拟,则不支持延迟加载,并且您在集合属性上获得null。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM