gpt4 book ai didi

.net - Entity Framework : Navigation Properties Issue

转载 作者:行者123 更新时间:2023-12-03 06:41:19 25 4
gpt4 key购买 nike

我正在使用 Entity Framework 代码优先,并且我有一个类Course,它具有导航属性Students:

public virtual Collection<Student> Students { get; set;}

它工作正常,但是当我访问此导航属性时,所有数据都是从数据库中检索的:

var allStudents = course.Students; // Here it retrieves the data
var activeStudents = allStudents.Where(n => n.Active); // Here it filter the data on memory
var listOfActiveStudents = activeStudents.ToList(); // It already has the data on memory.

正如您所想象的,我需要在执行 .ToList() 时执行查询,因为我不想将所有 Students 从数据库,仅事件的。

你知道我做错了什么吗?

最佳答案

延迟加载将整个集合加载到内存中。如果您不希望这样做,请通过删除 virtual 关键字来关闭延迟加载,并在 DbEntry 上使用 Query 对象:

public GetCourseWithActiveStudentsLoaded(int courseid)
{
var course= context.Courses.Find(courseid);

context.Entry(course)
.Collection(c => c.Students)
.Query()
.Where(s => s.Active)
.Load();

return user
}

“事件”标志是否表明您正在尝试实现软删除?如果是这样,这里有一个解决方案:Soft Delete in Entity Framework

您可以在此处为过滤后的内容投票:Allow filtering for Include extension method

另一种方法是使用继承。您可以有一个继承自 StudentActiveStudent 和一个 ActiveStudents 导航属性,以及一个 AllStudents 导航属性类(class)

public virtual Collection<Student> AllStudents { get; set;}
public virtual Collection<ActiveStudent> ActiveStudents { get; set;}

引用:

Applying filters when explicitly loading related entities :

关于.net - Entity Framework : Navigation Properties Issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20357511/

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