gpt4 book ai didi

c# - 在 Entity Framework 4 中填充外键对象

转载 作者:太空狗 更新时间:2023-10-29 20:05:12 26 4
gpt4 key购买 nike

我是第一次使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com