前边项目搭建了仓储层。但是还未使用。
这里,我们带来的就是简单的仓储实现》
1、创建Repository类:
public class Repository<T> : SimpleClient<T> where T : class, new()
{
public Repository(ISqlSugarClient db)
{
base.Context = db;
}
/// <summary>
/// 扩展方法,自带方法不能满足的时候可以添加新方法
/// </summary>
/// <returns></returns>
public List<T> CommQuery(string json)
{
//base.Context.Queryable<T>().ToList();可以拿到SqlSugarClient 做复杂操作
return null;
}
}
这个也是官方给的一个案例。
可看:仓储定义 - SqlSugar 5x - .NET果糖网
2、添加简单增删改查:
#region 补充
private readonly ISqlSugarClient _db;
/// <summary>
/// 根据IDs查询数据
/// </summary>
/// <param name="lstIds"></param>
/// <returns></returns>
public async Task<List<T>> QueryByIDs(object[] lstIds)
{
return await _db.Queryable<T>().In(lstIds).ToListAsync();
}
/// <summary>
/// 新增实体
/// </summary>
/// <param name="entity"></param>
/// <returns>返回主键ID</returns>
public async Task<int> AddByEntity(T entity)
{
var insert = _db.Insertable(entity);
return await insert.ExecuteReturnIdentityAsync();
}
/// <summary>
/// 批量新增实体(速度快)
/// </summary>
/// <param name="listEntitys">实体集合</param>
/// <returns>返回自增id集合</returns>
public async Task<List<int>> AddByEntitys(List<T> listEntitys)
{
return await _db.Insertable(listEntitys.ToArray()).ExecuteReturnPkListAsync<int>();
}
/// <summary>
/// 更新实体数据
/// </summary>
/// <param name="entity">实体类</param>
/// <returns>ID</returns>
public async Task<bool> UpdateByEntity(T entity)
{
var i = await _db.Updateable(entity).ExecuteCommandHasChangeAsync();
return i;
}
/// <summary>
/// 批量更新实体数据
/// </summary>
/// <param name="entitys">实体类集合</param>
/// <returns></returns>
public async Task<bool> UpdateByEntitys(List<T> entitys)
{
return await _db.Updateable(entitys).ExecuteCommandHasChangeAsync();
}
/// <summary>
/// 删除实体
/// </summary>
/// <param name="entity">实体类</param>
/// <returns></returns>
public async Task<bool> DeleteByEntity(T entity)
{
return await _db.Deleteable(entity).ExecuteCommandHasChangeAsync();
}
/// <summary>
/// 删除实体
/// </summary>
/// <param name="entitys">实体类集合</param>
/// <returns></returns>
public async Task<bool> DeleteByEntity(List<T> entitys)
{
return await _db.Deleteable(entitys).ExecuteCommandHasChangeAsync();
}
/// <summary>
/// 删除指定ID的数据
/// </summary>
/// <param name="id">主键ID</param>
/// <returns></returns>
public async Task<bool> DeleteById(object id)
{
return await _db.Deleteable<T>().In(id).ExecuteCommandHasChangeAsync();
}
/// <summary>
/// 删除指定ID集合的数据(批量删除)
/// </summary>
/// <param name="ids">主键ID集合</param>
/// <returns></returns>
public async Task<bool> DeleteByIds(object[] ids)
{
return await _db.Deleteable<T>().In(ids).ExecuteCommandHasChangeAsync();
}
/// <summary>
/// 查询实体全部数据
/// </summary>
/// <returns>全部数据集合</returns>
public async Task<List<T>> QueryAll()
{
return await _db.Queryable<T>().ToListAsync();
}
/// <summary>
/// 查询实体数据(按条件)
/// </summary>
/// <param name="where">条件</param>
/// <returns>实体数据</returns>
public async Task<List<T>> Query(string where)
{
return await _db.Queryable<T>().WhereIF(!string.IsNullOrEmpty(where), where).ToListAsync();
}
//分页:
#endregion
这里的_db是我新建的一个ISqlSugarClient,在构造函数里边记得赋值哦。
其实他也等于已有的那个base.Context。
个人习惯使用db这样名称的数据访问来源对象
3、使用:
3.1、注入服务:
cs
builder.Services.AddScoped(typeof(Repository<>));
3.2、注入构造函数内
cs
private readonly Repository<Users> _usersRep;
public UsersService(Repository<Users> usersRep)
{
_usersRep = usersRep;
}
3.3、案例:
cs
public async void Test()
{
Users user = new Users()
{
UserName = "张三",
PassWord = "123456",
PhoneNumber = "",
Email = "",
UserStatus = UsersEnum_UserStatus.ok,
Gender = UsersEnum_Gender.secrecy,
OpenId = "",
Avatar = "",
Admire = "",
SubScribe = "",
Introduction = "",
UserType = UsersEnum_UserType.other,
CreateBy = 0,
CreateTime = DateTime.Now,
UpdateBy = 0,
UpdateTime = null,
};
var i1 = await _usersRep.InsertAsync(user);
var i11 = await _usersRep.AddByEntity(user);
var i2 = await _usersRep.QueryAll();
user.UpdateBy = 1;
user.UpdateTime = DateTime.Now;
var i3 =await _usersRep.UpdateAsync(user);
var i31 = await _usersRep.UpdateByEntity(user);
var i4 = await _usersRep.DeleteAsync(user);
var i41 = await _usersRep.DeleteByEntity(user);
}
这里简单例举了几个,可以自行研究并补充.......
4、拓展:
4.1、上边的操作可以根据每一个类/实体去做特殊处理。(不推荐)
4.2、.....
下一篇: