.net core 通用存储库功能的使用
我是EF Core的新手。以下是我要获取的存储库函数:.net core 通用存储库功能的使用,.net-core,ef-core-3.1,.net Core,Ef Core 3.1,我是EF Core的新手。以下是我要获取的存储库函数: public async Task GetAsync(表达式谓词=null,Func orderBy=null,字符串includeString=null,bool disableTracking=true) { IQueryable查询=_dbContext.Set(); if(disableTracking)query=query.AsNoTracking(); 如果(!string.IsNullOrWhiteSpace(include
public async Task GetAsync(表达式谓词=null,Func orderBy=null,字符串includeString=null,bool disableTracking=true)
{
IQueryable查询=_dbContext.Set();
if(disableTracking)query=query.AsNoTracking();
如果(!string.IsNullOrWhiteSpace(includeString))query=query.Include(includeString);
if(谓词!=null)query=query.Where(谓词);
if(orderBy!=null)
return wait orderBy(query.ToListAsync();
return wait query.ToListAsync();
}
公共异步任务GetAsync(表达式谓词=null,Func orderBy=null,列表包含=null,bool disableTracking=true)
{
IQueryable查询=_dbContext.Set();
if(disableTracking)query=query.AsNoTracking();
如果(includes!=null)query=includes.Aggregate(query,(current,include)=>current.include(include));
if(谓词!=null)query=query.Where(谓词);
if(orderBy!=null)
return wait orderBy(query.ToListAsync();
return wait query.ToListAsync();
}
我知道如何设置过滤条件。我的问题是:如何调用Include和OrderBy
工作示例:
GetAsync(x=>x.Name.ToLower().Contains(productName.ToLower()))
包含不需要参数。若您在数据库中有关系,则可以将其用于include。它会自动获取所有表(与主表链接)
foreach (var property in _dbContext.Model.FindEntityType(typeof(T)).GetNavigations())
query = query.Include(property.Name);
像这样
public async Task<IReadOnlyList<T>> GetAsync(Expression<Func<T, bool>> predicate = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, bool disableTracking = true)
{
IQueryable<T> query = _dbContext.Set<T>();
if (disableTracking) query = query.AsNoTracking();
foreach (var property in _dbContext.Model.FindEntityType(typeof(T)).GetNavigations())
query = query.Include(property.Name);
if (predicate != null) query = query.Where(predicate);
if (orderBy != null)
return await orderBy(query).ToListAsync();
return await query.ToListAsync();
}
public async Task GetAsync(表达式谓词=null,Func orderBy=null,bool disableTracking=true)
{
IQueryable查询=_dbContext.Set();
if(disableTracking)query=query.AsNoTracking();
foreach(_dbContext.Model.FindEntityType(typeof(T)).GetNavigations()中的var属性)
query=query.Include(property.Name);
if(谓词!=null)query=query.Where(谓词);
if(orderBy!=null)
return wait orderBy(query.ToListAsync();
return wait query.ToListAsync();
}
通用存储库
**
控制器
**
谢谢……但我需要使用get repository方法是的,您可以在get repository方法中使用它。编辑了这篇文章,让它更清晰。我删除了includeString参数。谢谢。如何在控制器/服务中调用此函数?只需调用GetAsync(x=>x.Name.ToLower().Contains(productName.ToLower());像往常一样。这就是全部。我给出的代码会自动为您获取所有包含的表格。我在编辑的帖子中添加了截图。Get table with include和Get table with all include性能几乎相同。