gpt4 book ai didi

c# - Entity Framework 查找结果与 LINQ 结果

转载 作者:太空宇宙 更新时间:2023-11-03 16:17:55 25 4
gpt4 key购买 nike

我是一名新的 .NET 开发人员。我有 2 个这样的实体类

public class Student
{
public int userId { get; set; }
public string username { get; set; }
public string firstname { get; set; }
public string lastname { get; set; }
public string email { get; set; }
public Course course { get; set; }
}

public class Course
{
[Key]
public int courseId { get; set; }
public String courseName { get; set; }
}

我正在像这样使用数据库上下文对象

using (MyDbContext db = new MyDbContext())

当我使用

访问 Student 对象时
Student stdent = db.students.Find(1);

student对象中native类型(int,string)的成员变量有值,但是(Course)类型的course变量返回null。

然而,当我使用

var result = from student in db.students where student.userId == 1 select student;

结果包含所有成员变量的值(整个类(class)对象都在这里)

这是预期的行为还是我遗漏或忽略了什么?

我什至在我的数据库上下文中添加了这个构造函数来禁用延迟加载但没有帮助

    public MyDbContext() : base()
{
this.Configuration.LazyLoadingEnabled = false;
}

最佳答案

这里发生的是,在第一种情况(查找)中,您从数据库中获取了一个对象。 Course 不是延迟加载,所以 Course 引用是 null

在第二种情况下,您只是定义了一个查询而不是执行它。我假设您随后循环遍历结果并同时检查 Course 是否存在。这会导致加载 Course,因为您在执行时访问了 Course 导航属性,它已成为查询的一部分。

如果你这样做

var s = (from student in db.students where student.userId == 1 select student)
.Single();

你会注意到 Course 是空的,因为在执行查询时没有引用 Course 获取学生(Single语句)。

关于c# - Entity Framework 查找结果与 LINQ 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15151506/

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