2013-07-31 150 views
5

我使用的EntityFramework首次,也许这个问题是这么简单......我已经用代码首先method..I有一流的人才队伍,看起来像这样灌装外键对象:在实体框架4

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; } 

} 

这在人事类的最后一个属性是course..my问题的人员表的外键是当我想要检索的所有人员(或人员)从数据库使用lambda表达式..外键对象为空.. lambda表达式为1 ike below:

Context.ContextInstance.Personnels.ToList(); 

如果我改变表达式,这个外键对象不是空的。

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

是正确的方式?? ..有没有更好的办法?..我推测,EF将自动明白!!!!如果有超过1 FK那我也使用包括所有这些?请帮我理解。

感谢

+0

可能的重复[禁用实体框架4中的默认延迟加载](http://stackoverflow.com/questions/2967214/disable-lazy-loading-by-default-in-entity-framework-4) –

回答

5

这是由于延迟加载。当你打电话给Context.ContextInstance.Personnels.ToList();时,这将获取所有人员的职务,但Title将不会获取,直到它被实例化,所以让它虚拟得到它。

或者,您可以通过

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

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

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