using SqlSugar;
using System.Data;
using System.Linq.Expressions;
using Yi.Framework.Common.Models;
using Yi.Framework.Model.Models;
using Yi.Framework.Model.Query;
/***这里面写的代码不会给覆盖,如果要重新生成请删除 Repository.cs ***/
namespace Yi.Framework.Repository
{
///
/// 仓储模式
///
///
public class Repository : SimpleClient, IRepository where T : class, IBaseModelEntity, new()
{
public ISqlSugarClient _Db { get { return base.Context; } set { } }
///
/// 构造函数
///
///
public Repository(ISqlSugarClient context) : base(context)//注意这里要有默认值等于null
{
}
///
/// 异步事务
///
///
///
public async Task UseTranAsync(Func func)
{
var con = Context;
var res = await _Db.AsTenant().UseTranAsync(func);
return res.IsSuccess;
}
///
/// 执行查询sql返回dto列表
///
///
///
///
public async Task> UseSqlAsync(string sql, object parameters = null)
{
return await _Db.Ado.SqlQueryAsync(sql, parameters);
}
///
/// 执行增删改sql返回状态
///
///
///
public async Task UseSqlAsync(string sql, object parameters)
{
return await _Db.Ado.ExecuteCommandAsync(sql, parameters) >0;
}
///
/// 添加返回实体
///
///
///
public async Task InsertReturnEntityAsync(T entity)
{
entity.Id =SnowFlakeSingle.instance.getID();
return await _Db.Insertable(entity).ExecuteReturnEntityAsync();
}
///
/// 更新忽略空值
///
///
///
public async Task UpdateIgnoreNullAsync(T entity)
{
return await _Db.Updateable(entity).IgnoreColumns(true).ExecuteCommandAsync()>0;
}
///
/// 逻辑多删除
///
///
public async Task DeleteByLogicAsync(List ids)
{
var entitys = await _Db.Queryable().Where(u => ids.Contains(u.Id)).ToListAsync();
entitys.ForEach(u=>u.IsDeleted=true);
return await _Db.Updateable(entitys).ExecuteCommandAsync()>0;
}
///
/// 调用存储过程
///
///
///
///
///
public async Task> StoreAsync(string storeName, object para)
{
return await _Db.Ado.UseStoredProcedure().SqlQueryAsync(storeName, para);
}
///
/// 多条件查询
///
///
///
public async Task> GetListAsync(QueryCondition pars)
{
return await QueryConditionHandler(pars).ToListAsync();
}
///
/// 仓储扩展方法:单表查询通用分页
///
///
public async Task>> CommonPageAsync(QueryPageCondition pars)
{
RefAsync tolCount = 0;
var result = await QueryConditionHandler(new QueryCondition() {OrderBys=pars.OrderBys,Parameters=pars.Parameters } ).ToPageListAsync(pars.Index, pars.Size, tolCount);
return new PageModel>
{
Total = tolCount.Value,
Data = result
};
}
public ISugarQueryable QueryConditionHandler(QueryCondition pars)
{
var sugarParamters = pars.Parameters.Select(it => (IConditionalModel)new ConditionalModel()
{
ConditionalType = it.Type,
FieldName = it.Key,
FieldValue = it.Value
}).ToList();
var query = _Db.Queryable();
if (pars.OrderBys != null)
{
foreach (var item in pars.OrderBys)
{
query.OrderBy(item.ToSqlFilter());
}
}
return query.Where(sugarParamters);
}
}
}