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 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/

相关文章:

entity-framework - Entity Framework 代码第一映射(链接)表?

entity-framework - 在 Entity Framework 中映射值类型集合

c# - 从 Entity Framework 返回自定义对象 <List T> 并分配给对象数据源

c# - C# 中长值的枚举

c# - Hololens 中的 DLL 与 IL2CPP 后端发生冲突

c# - 无法将自定义值插入标识列 - Entity Framework

c# - Entity Framework 4.1 和数据库 (MySQL) 性能问题 {当表包含 320 000 行时如何加快查询以返回第一条记录}

c# - System.Net.Mail.SmtpClient 在 4.7 中是否已过时?

c# - .Net Core 3.1 中的问题 : Referring .Net Standard 2.1 项目

c# - 如何从 Asp.Net Core 中的 DBContext 文件中的 appsettings.json 读取连接字符串?