ToList()可以工作。
public List<class> Get()
{
using (var db = new dbcontext())
{
return db.class.ToList();
}
}
但是AsQueryable()无法工作。如何使其与使用一起工作?我想使用可查询的,因为它可以比ToList()更快地获取数据。
[在单一方法中不可能,您需要在DbContext
方法之外管理Get
的生存期。
.ToList()
变体有效,因为调用.ToList()
实体框架时查询数据并存储结果对象。之后,您无需查询数据库即可访问数据,因此不再需要DbContext
即可访问列表项。
使用Queryable
时,将查询推迟到以后的某个时间点。这使EF Core可以创建更高效的数据库查询,因为调用Where()
或类似方法时,可以将Linq Operatos(如ToList()
)转换为SQL。需要DbContext
才能执行实际的SQL查询,因此需要保持活动状态。
也请参阅https://docs.microsoft.com/en-us/ef/ef6/fundamentals/working-with-dbcontext#lifetime,以获取有关DbContext
寿命的一些准则。本文适用于EF6,但该概念也适用于EF Core。