397 lines
13 KiB
C#
397 lines
13 KiB
C#
using SqlSugar;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Linq.Expressions;
|
||
using System.Reflection;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace ORM
|
||
{
|
||
public partial class SqlSugarRepository<TEntity> : SimpleClient<TEntity> where TEntity : class, new()
|
||
{
|
||
/// <summary>
|
||
/// 实体集合
|
||
/// </summary>
|
||
public ISugarQueryable<TEntity> Entities => Context.Queryable<TEntity>();
|
||
|
||
/// <summary>
|
||
/// 构造函数
|
||
/// </summary>
|
||
public SqlSugarRepository(ISqlSugarClient context = null) : base(context)
|
||
{
|
||
// 绑定数据库操作对象
|
||
Context = SqlSugarContext.DbContext;
|
||
// 备忘:GetConnectionScopeWithAttr会导致不能触发Aop.OnLogExecuting、Aop.OnLogExecuted等事件
|
||
// 详见:https://www.donet5.com/Home/Doc?typeId=2405(之2.1、方法说明)
|
||
// 详见:https://www.donet5.com/Home/Doc?typeId=2246(之2.2、根据特性获取)和(之4、多租户设置AOP)
|
||
// base.Context = SqlSugarContext.DbContext.GetConnectionScopeWithAttr<TEntity>();
|
||
// 根据特性获取,适合一个实体和库是一对一的情况
|
||
}
|
||
|
||
|
||
#region 查询
|
||
/// <summary>
|
||
/// 检查是否存在
|
||
/// </summary>
|
||
/// <param name="whereExpression"></param>
|
||
/// <returns></returns>
|
||
public bool IsExists(Expression<Func<TEntity, bool>> whereExpression)
|
||
{
|
||
return Entities.Any(whereExpression);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 检查是否存在
|
||
/// </summary>
|
||
/// <param name="whereExpression"></param>
|
||
/// <returns></returns>
|
||
public async Task<bool> IsExistsAsync(Expression<Func<TEntity, bool>> whereExpression)
|
||
{
|
||
return await Entities.AnyAsync(whereExpression);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 通过主键获取实体
|
||
/// </summary>
|
||
/// <param name="Id"></param>
|
||
/// <returns></returns>
|
||
public TEntity Single(dynamic Id)
|
||
{
|
||
return Entities.InSingle(Id);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取一个实体
|
||
/// </summary>
|
||
/// <param name="whereExpression"></param>
|
||
/// <returns></returns>
|
||
public TEntity Single(Expression<Func<TEntity, bool>> whereExpression)
|
||
{
|
||
return Entities.Single(whereExpression);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取一个实体
|
||
/// </summary>
|
||
/// <param name="whereExpression"></param>
|
||
/// <returns></returns>
|
||
public Task<TEntity> SingleAsync(Expression<Func<TEntity, bool>> whereExpression)
|
||
{
|
||
return Entities.SingleAsync(whereExpression);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取一个实体
|
||
/// </summary>
|
||
/// <param name="whereExpression"></param>
|
||
/// <returns></returns>
|
||
public TEntity FirstOrDefault(Expression<Func<TEntity, bool>> whereExpression)
|
||
{
|
||
return Entities.First(whereExpression);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取一个实体
|
||
/// </summary>
|
||
/// <param name="whereExpression"></param>
|
||
/// <returns></returns>
|
||
public async Task<TEntity> FirstOrDefaultAsync(Expression<Func<TEntity, bool>> whereExpression)
|
||
{
|
||
return await Entities.FirstAsync(whereExpression);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取列表
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public List<TEntity> ToList()
|
||
{
|
||
return Entities.ToList();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取列表
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public Task<List<TEntity>> ToListAsync()
|
||
{
|
||
return Entities.ToListAsync();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取列表
|
||
/// </summary>
|
||
/// <param name="whereExpression"></param>
|
||
/// <returns></returns>
|
||
public List<TEntity> ToList(Expression<Func<TEntity, bool>> whereExpression)
|
||
{
|
||
return Entities.Where(whereExpression).ToList();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取列表
|
||
/// </summary>
|
||
/// <param name="whereExpression"></param>
|
||
/// <returns></returns>
|
||
public Task<List<TEntity>> ToListAsync(Expression<Func<TEntity, bool>> whereExpression)
|
||
{
|
||
return Entities.Where(whereExpression).ToListAsync();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取列表
|
||
/// </summary>
|
||
/// <param name="whereExpression"></param>
|
||
/// <param name="orderByExpression"></param>
|
||
/// <param name="orderByType"></param>
|
||
/// <returns></returns>
|
||
public List<TEntity> ToList(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderByExpression = null, OrderByType orderByType = OrderByType.Asc)
|
||
{
|
||
return Entities.OrderByIF(orderByExpression != null, orderByExpression, orderByType).Where(whereExpression).ToList();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取列表
|
||
/// </summary>
|
||
/// <param name="whereExpression"></param>
|
||
/// <param name="orderByExpression"></param>
|
||
/// <param name="orderByType"></param>
|
||
/// <returns></returns>
|
||
public Task<List<TEntity>> ToListAsync(Expression<Func<TEntity, bool>> whereExpression, Expression<Func<TEntity, object>> orderByExpression = null, OrderByType orderByType = OrderByType.Asc)
|
||
{
|
||
return Entities.OrderByIF(orderByExpression != null, orderByExpression, orderByType).Where(whereExpression).ToListAsync();
|
||
}
|
||
#endregion 查询
|
||
|
||
|
||
#region 新增
|
||
/// <summary>
|
||
/// 新增多条记录
|
||
/// </summary>
|
||
/// <param name="entities"></param>
|
||
/// <returns></returns>
|
||
public int Insert(TEntity[] entities)
|
||
{
|
||
return Context.Insertable(entities).ExecuteCommand();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 新增多条记录
|
||
/// </summary>
|
||
/// <param name="entities"></param>
|
||
/// <returns></returns>
|
||
public Task<int> InsertAsync(TEntity[] entities)
|
||
{
|
||
return Context.Insertable(entities).ExecuteCommandAsync();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 新增多条记录
|
||
/// </summary>
|
||
/// <param name="entities"></param>
|
||
/// <returns></returns>
|
||
public int Insert(IEnumerable<TEntity> entities)
|
||
{
|
||
return Context.Insertable(entities.ToArray()).ExecuteCommand();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 新增多条记录
|
||
/// </summary>
|
||
/// <param name="entities"></param>
|
||
/// <returns></returns>
|
||
public Task<int> InsertAsync(IEnumerable<TEntity> entities)
|
||
{
|
||
if (entities != null && entities.Any())
|
||
{
|
||
return Context.Insertable(entities.ToArray()).ExecuteCommandAsync();
|
||
}
|
||
return Task.FromResult(0);
|
||
}
|
||
#endregion 新增
|
||
|
||
|
||
#region 更新
|
||
/// <summary>
|
||
/// 更新单条记录指定列
|
||
/// </summary>
|
||
/// <param name="entity"></param>
|
||
/// <param name="updateColumn"></param>
|
||
/// <returns></returns>
|
||
public int Update(TEntity entity, object updateColumn)
|
||
{
|
||
return Context.Updateable(entity).UpdateColumns(MergeUpdateColumns(updateColumn)).ExecuteCommand();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新单条记录指定列
|
||
/// </summary>
|
||
/// <param name="entity"></param>
|
||
/// <param name="updateColumn"></param>
|
||
/// <returns></returns>
|
||
public Task<int> UpdateAsync(TEntity entity, object updateColumn)
|
||
{
|
||
return Context.Updateable(entity).UpdateColumns(MergeUpdateColumns(updateColumn)).ExecuteCommandAsync();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新单条记录指定列
|
||
/// </summary>
|
||
/// <param name="entity"></param>
|
||
/// <param name="updateColumn"></param>
|
||
/// <param name="whereExpression"></param>
|
||
/// <returns></returns>
|
||
public int Update(TEntity entity, object updateColumn, Expression<Func<TEntity, bool>> whereExpression)
|
||
{
|
||
return Context.Updateable(entity).UpdateColumns(MergeUpdateColumns(updateColumn)).Where(whereExpression).ExecuteCommand();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新单条记录指定列
|
||
/// </summary>
|
||
/// <param name="entity"></param>
|
||
/// <param name="updateColumn"></param>
|
||
/// <param name="whereExpression"></param>
|
||
/// <returns></returns>
|
||
public Task<int> UpdateAsync(TEntity entity, object updateColumn, Expression<Func<TEntity, bool>> whereExpression)
|
||
{
|
||
return Context.Updateable(entity).UpdateColumns(MergeUpdateColumns(updateColumn)).Where(whereExpression).ExecuteCommandAsync();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新多条记录
|
||
/// </summary>
|
||
/// <param name="entities"></param>
|
||
/// <returns></returns>
|
||
public int Update(TEntity[] entities)
|
||
{
|
||
return Context.Updateable(entities).ExecuteCommand();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新多条记录
|
||
/// </summary>
|
||
/// <param name="entities"></param>
|
||
/// <returns></returns>
|
||
public Task<int> UpdateAsync(TEntity[] entities)
|
||
{
|
||
return Context.Updateable(entities).ExecuteCommandAsync();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新多条记录指定列
|
||
/// </summary>
|
||
/// <param name="entities"></param>
|
||
/// <param name="updateColumn"></param>
|
||
/// <returns></returns>
|
||
public int Update(TEntity[] entities, object updateColumn)
|
||
{
|
||
return Context.Updateable(entities).UpdateColumns(MergeUpdateColumns(updateColumn)).ExecuteCommand();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新多条记录指定列
|
||
/// </summary>
|
||
/// <param name="entities"></param>
|
||
/// <param name="updateColumn"></param>
|
||
/// <returns></returns>
|
||
public Task<int> UpdateAsync(TEntity[] entities, object updateColumn)
|
||
{
|
||
return Context.Updateable(entities).UpdateColumns(MergeUpdateColumns(updateColumn)).ExecuteCommandAsync();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 合并指定更新列和附加更新列
|
||
/// </summary>
|
||
/// <param name="updateColumn"></param>
|
||
/// <returns></returns>
|
||
private string[] MergeUpdateColumns(object updateColumn)
|
||
{
|
||
List<string> columnList = new List<string>();
|
||
if (updateColumn.GetType() == typeof(string))
|
||
{
|
||
columnList.Add((string)updateColumn);
|
||
}
|
||
else if (updateColumn.GetType() == typeof(string[]))
|
||
{
|
||
columnList.AddRange((string[])updateColumn);
|
||
}
|
||
return columnList.ToArray();
|
||
}
|
||
#endregion 更新
|
||
|
||
|
||
#region 删除
|
||
/// <summary>
|
||
/// 删除一条记录
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
public int Delete(object key)
|
||
{
|
||
return Context.Deleteable<TEntity>().In(key).ExecuteCommand();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除一条记录
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
public Task<int> DeleteAsync(object key)
|
||
{
|
||
return Context.Deleteable<TEntity>().In(key).ExecuteCommandAsync();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除多条记录
|
||
/// </summary>
|
||
/// <param name="keys"></param>
|
||
/// <returns></returns>
|
||
public int Delete(object[] keys)
|
||
{
|
||
return Context.Deleteable<TEntity>().In(keys).ExecuteCommand();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除多条记录
|
||
/// </summary>
|
||
/// <param name="keys"></param>
|
||
/// <returns></returns>
|
||
public Task<int> DeleteAsync(object[] keys)
|
||
{
|
||
return Context.Deleteable<TEntity>().In(keys).ExecuteCommandAsync();
|
||
}
|
||
#endregion 删除
|
||
|
||
|
||
#region 事务
|
||
/// <summary>
|
||
/// 开启事务
|
||
/// </summary>
|
||
public void BeginTran()
|
||
{
|
||
Context.Ado.BeginTran();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 提交事务
|
||
/// </summary>
|
||
public void CommitTran()
|
||
{
|
||
Context.Ado.CommitTran();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 回滚事务
|
||
/// </summary>
|
||
public void RollbackTran()
|
||
{
|
||
Context.Ado.RollbackTran();
|
||
}
|
||
#endregion 事务
|
||
|
||
}
|
||
}
|