工作单元 sql 查询性能下降

Unit of work sql query performance degraded

我在使用工作单元进行查询时遇到性能问题。

当我直接使用 DbContext 时,我会像这样进行 linq 查询:

var result = from x in ctx.client select new { Name= x.name };

当我使用 Unit 时,我编写了以下代码:

var result = from x in uow.GetClientRepository.GetAll() select new { Name = x.name };

生成 SQL 查询类型的内容:

Select * from Client

以上代码将生成一个 SQL 类型的查询:

Select name from Client

扩展大卫的回答:

如果 GetAll() 返回 IEnumerable<T>IList<T> 或类似的东西并且看起来像:

public IEnumerable<TEntity> GetAll()
{
   return _context.TEntities.ToList();
}

那么您需要将其更改为以下内容:

public IQueryable<TEntity> GetAll()
{
   return _context.TEntities.AsQueryable();
}

此外,以防万一有人遇到这个问题并想知道为什么要使用它;该模式有利于集中应用程序的核心业务规则,例如软删除活动状态:

public IQueryable<TEntity> GetAll()
{
   return _context.TEntities
      .Where(x => x.IsActive);
}
// Note: AsQueryable() is not needed when the method returns IQueryable<T>

或强制授权,例如租赁...(多个客户端访问单个云服务,他们的数据预计将被隔离。)

public IQueryable<TEntity> GetAll()
{
   var tenantId = UserLocatorService.GetCurrentUserTenantId();
   return _context.TEntities
      .Where(x => x.IsActive && x.TopLevelEntity.TenantId == tenantId);
}

其中 UserLocatorService 表示依赖服务,用于评估当前登录的用户及其代表的租户。