Entity Framework Core:如何返回queryable 和'using'?

问题描述 投票:0回答:1

ToList()可以工作。

public List<class> Get()
{
     using (var db = new dbcontext())
     {
          return db.class.ToList();
     }
}

但是AsQueryable()无法工作。如何使其与使用一起工作?我想使用可查询的,因为它可以比ToList()更快地获取数据。

.net-core entity-framework-core
1个回答
0
投票

[在单一方法中不可能,您需要在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。

© www.soinside.com 2019 - 2024. All rights reserved.