NET7中sqlsugar的使用
仿《深入浅出ASP.NET CORE》这书里的IRepository和RepositoryBase
using SqlSugar;
using System.Linq.Expressions;
namespace WebApplication1.DAL
{
/// <summary>
/// 所有仓储的约定,此接口仅作为约定,用于标识他们
/// </summary>
/// <typeparam name="TEntity">传入仓储的实体模型</typeparam>
/// <typeparam name="TPrimaryKey">传入仓储的主键类型</typeparam>
public interface IRepository<TEntity, TPrimaryKey> where TEntity : class
{
#region 查询
ISugarQueryable<TEntity> GetAll();
List<TEntity> GetAllList();
Task<List<TEntity>> GetAllListAsync();
List<TEntity> GetAllList(Expression<Func<TEntity, bool>> predicate);
Task<List<TEntity>> GetAllListAsync(Expression<Func<TEntity, bool>> predicate);
TEntity FirstOrDefault(Expression<Func<TEntity, bool>> predicate);
Task<TEntity> FirstOrDefaultAsycn(Expression<Func<TEntity, bool>> predicate);
#endregion
#region 新增
void Insert(TEntity entity);
Task InsertAsync(TEntity entity);
#endregion
#region 更新
void Update(TEntity entity);
Task UpdateAsync(TEntity entity);
#endregion
#region 删除
void Delete(TEntity entity);
Task DeleteAsync(TEntity entity);
void Delete(Expression<Func<TEntity, bool>> predicate);
Task DeleteAsync(Expression<Func<TEntity, bool>> predicate);
#endregion
#region 总和计算
int Count();
Task<int> CountAsync();
int Count(Expression<Func<TEntity, bool>> predicate);
Task<int> CountAsync(Expression<Func<TEntity, bool>> predicate);
#endregion
}
}
using System.Collections.Generic;
using System.Linq.Expressions;
using System;
using SqlSugar;
namespace WebApplication1.DAL
{
/// <summary>
/// 默认仓储的通用功能实现,用于所有的领域模型
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <typeparam name="TPrimaryKey"></typeparam>
public class RepositoryBase<TEntity, TPrimaryKey> : IRepository<TEntity, TPrimaryKey> where TEntity : class
{
protected readonly ISqlSugarClient db;
public RepositoryBase(ISqlSugarClient db)
{
this.db=db;
}
public int Count()
{
return GetAll().Count();
}
public int Count(Expression<Func<TEntity, bool>> predicate)
{
return GetAll().Where(predicate).Count();
}
public async Task<int> CountAsync()
{
return await GetAll().CountAsync();
}
public async Task<int> CountAsync(Expression<Func<TEntity, bool>> predicate)
{
return await GetAll().Where(predicate).CountAsync();
}
public void Delete(TEntity entity)
{
db.DeleteableByObject(entity).ExecuteCommand();
}
public async Task DeleteAsync(TEntity entity)
{
await db.DeleteableByObject(entity).ExecuteCommandAsync();
}
public void Delete(Expression<Func<TEntity, bool>> predicate)
{
foreach (var entity in GetAll().Where(predicate).ToList())
{
Delete(entity);
}
}
public async Task DeleteAsync(Expression<Func<TEntity, bool>> predicate)
{
foreach (var entity in GetAll().Where(predicate).ToList())
{
await DeleteAsync(entity);
}
}
public TEntity FirstOrDefault(Expression<Func<TEntity, bool>> predicate)
{
return GetAll().First(predicate);
}
public async Task<TEntity> FirstOrDefaultAsycn(Expression<Func<TEntity, bool>> predicate)
{
return await GetAll().FirstAsync(predicate);
}
public ISugarQueryable<TEntity> GetAll()
{
return db.Queryable<TEntity>();
}
public List<TEntity> GetAllList()
{
return GetAll().ToList();
}
public List<TEntity> GetAllList(Expression<Func<TEntity, bool>> predicate)
{
return GetAll().Where(predicate).ToList();
}
public async Task<List<TEntity>> GetAllListAsync()
{
return await GetAll().ToListAsync();
}
public async Task<List<TEntity>> GetAllListAsync(Expression<Func<TEntity, bool>> predicate)
{
return await GetAll().Where(predicate).ToListAsync();
}
public void Insert(TEntity entity)
{
db.InsertableByObject(entity).ExecuteCommand();
}
public async Task InsertAsync(TEntity entity)
{
await db.InsertableByObject(entity).ExecuteCommandAsync();
}
public void Update(TEntity entity)
{
db.UpdateableByObject(entity).ExecuteCommand();
}
public async Task UpdateAsync(TEntity entity)
{
await db.UpdateableByObject(entity).ExecuteCommandAsync();
}
}
}
//注册上下文:AOP里面可以获取IOC对象,如果有现成框架比如Furion可以不写这一行
builder.Services.AddHttpContextAccessor();
//注册SqlSugar
builder.Services.AddSingleton<ISqlSugarClient>(s =>
{
SqlSugarScope sqlSugar = new SqlSugarScope(new ConnectionConfig()
{
DbType = SqlSugar.DbType.SqlServer,
ConnectionString = "server=.\\sqlexpress;uid=sa;pwd=123456;database=studentdb;pooling=true;min pool size=5;max pool size=100;TrustServerCertificate=true;",
IsAutoCloseConnection = true,
},
db =>
{
//单例参数配置,所有上下文生效
db.Aop.OnLogExecuting = (sql, pars) =>
{
//获取IOC对象不要求在一个上下文
//vra log=s.GetService<Log>()
//获取IOC对象要求在一个上下文
//var appServive = s.GetService<IHttpContextAccessor>();
//var log= appServive?.HttpContext?.RequestServices.GetService<Log>();
};
});
return sqlSugar;
});
builder.Services.AddTransient(typeof(IRepository<,>), typeof(RepositoryBase<,>));
撸码:复制、粘贴,拿起键盘就是“干”!!!

浙公网安备 33010602011771号