使用工作单元进行查询时,我遇到了性能问题。
当我直接使用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
答案 0 :(得分:0)
详细介绍David的答案:
如果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表示依赖项服务,用于评估当前登录的用户及其代表的租户。