Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net db.Entry.Collection.Query没有急切地加载所有虚拟属性_Asp.net_Asp.net Mvc_Entity Framework_Eager Loading - Fatal编程技术网

Asp.net db.Entry.Collection.Query没有急切地加载所有虚拟属性

Asp.net db.Entry.Collection.Query没有急切地加载所有虚拟属性,asp.net,asp.net-mvc,entity-framework,eager-loading,Asp.net,Asp.net Mvc,Entity Framework,Eager Loading,我有以下场景(合并在一行中) 让我们假设用户对象将帖子作为虚拟属性(以便急切地加载它们)前一行的结果仅为该用户加载一篇帖子,而如果我执行以下操作之一: var Users = db.Entry(obj).Collection(collection).Query().ToList().Where(/*some condition*/).FirstOrDefault(/*some condition*/); //added ToList() after the Query method //OR d

我有以下场景(合并在一行中)

让我们假设用户对象将帖子作为虚拟属性(以便急切地加载它们)前一行的结果仅为该用户加载一篇帖子,而如果我执行以下操作之一:

var Users = db.Entry(obj).Collection(collection).Query().ToList().Where(/*some condition*/).FirstOrDefault(/*some condition*/);
//added ToList() after the Query method
//OR
db.Users.Where(/*full condition*/).FirstOrDefault()
//OR
db.Users.FirstOrDefault(/*full condition*/)
所有这些都会加载用户的所有帖子、我在第一次查询中缺少的内容,以及我如何通过它加载所有帖子?

尝试在第一次查询中的
之后添加
。包括(VirtualPropertyToGuardLoad)

请参阅使用即时加载的相关内容。

尝试在第一个查询中的
位置后添加
。包括(VirtualPropertyToGuardLoad)


请参阅有关使用即时加载的说明。

使用
.Include()
我强烈建议使用Lambda表达式而不是神奇字符串。对于方法include的lambda表达式,您必须使用名称空间
System.Data.Entity
,但您知道为什么它加载了一个条目吗?我不是肯定的,但我猜您的第一个查询没有命中集合中的所有项(因此不会加载它们的nav属性)。第一个工作查询通过ToList访问整个集合,第二个和第三个工作查询都访问db.Users,这是整个对象集合。使用
.Include()
我强烈建议使用Lambda表达式而不是神奇字符串。对于方法include的lambda表达式,您必须使用名称空间
System.Data.Entity
,但您知道为什么它加载了一个条目吗?我不是肯定的,但我猜您的第一个查询没有命中集合中的所有项(因此不会加载它们的nav属性)。而第一个工作查询通过ToList访问整个集合,第二个和第三个工作查询都访问db.Users,这是整个对象集合。
virtual
修饰符不适用于即时加载。它是用来启用延迟加载的。
virtual
修饰符不用于快速加载。这是为了启用延迟加载。
var Users = db.Entry(obj).Collection(collection).Query().ToList().Where(/*some condition*/).FirstOrDefault(/*some condition*/);
//added ToList() after the Query method
//OR
db.Users.Where(/*full condition*/).FirstOrDefault()
//OR
db.Users.FirstOrDefault(/*full condition*/)