using Infrastructure.Attribute;
using Infrastructure.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using ZR.Model;
using ZR.Repository.DbProvider;
namespace ZR.Service
{
///
/// 基础服务定义
///
///
public class BaseService : SugarDbContext, IBaseService where T : class, new()
{
#region 事务
///
/// 启用事务
///
public void BeginTran()
{
Db.Ado.BeginTran();
}
///
/// 提交事务
///
public void CommitTran()
{
Db.Ado.CommitTran();
}
///
/// 回滚事务
///
public void RollbackTran()
{
Db.Ado.RollbackTran();
}
#endregion
#region 添加操作
///
/// 添加一条数据
///
/// T
///
public int Add(T parm)
{
return Db.Insertable(parm).RemoveDataCache().ExecuteCommand();
}
///
/// 添加
///
///
/// 插入列
/// 忽略null列
///
public int Add(T parm, Expression> iClumns = null, bool ignoreNull = true)
{
return Db.Insertable(parm).InsertColumns(iClumns).IgnoreColumns(ignoreNullColumn: ignoreNull).ExecuteCommand();
}
///
/// 批量添加数据
///
/// List
///
public int Add(List parm)
{
return Db.Insertable(parm).RemoveDataCache().ExecuteCommand();
}
///
/// 添加或更新数据,不推荐使用了
///
/// List
///
public T Saveable(T parm, Expression> uClumns = null, Expression> iColumns = null)
{
var command = Db.Saveable(parm);
if (uClumns != null)
{
command = command.UpdateIgnoreColumns(uClumns);
}
if (iColumns != null)
{
command = command.InsertIgnoreColumns(iColumns);
}
return command.ExecuteReturnEntity();
}
///
/// 批量添加或更新数据
///
/// List
///
public List Saveable(List parm, Expression> uClumns = null, Expression> iColumns = null)
{
var command = Db.Saveable(parm);
if (uClumns != null)
{
command = command.UpdateIgnoreColumns(uClumns);
}
if (iColumns != null)
{
command = command.InsertIgnoreColumns(iColumns);
}
return command.ExecuteReturnList();
}
#endregion
#region 查询操作
///
/// 根据条件查询数据是否存在
///
/// 条件表达式树
///
public bool Any(Expression> where)
{
return Db.Queryable().Any(where);
}
///
/// 根据条件合计字段
///
/// 条件表达式树
///
public TResult Sum(Expression> where, Expression> field)
{
return Db.Queryable().Where(where).Sum(field);
}
///
/// 根据主值查询单条数据
///
/// 主键值
/// 泛型实体
public T GetId(object pkValue)
{
return Db.Queryable().InSingle(pkValue);
}
///
/// 根据主键查询多条数据
///
///
///
public List GetIn(object[] ids)
{
return Db.Queryable().In(ids).ToList();
}
///
/// 根据条件取条数
///
/// 条件表达式树
///
public int GetCount(Expression> where)
{
return Db.Queryable().Count(where);
}
///
/// 查询所有数据(无分页,请慎用)
///
///
public List GetAll(bool useCache = false, int cacheSecond = 3600)
{
return Db.Queryable().WithCacheIF(useCache, cacheSecond).ToList();
}
///
/// 获得一条数据
///
/// Expression>
///
public T GetFirst(Expression> where)
{
return Db.Queryable().Where(where).First();
}
///
/// 获得一条数据
///
/// string
///
public T GetFirst(string parm)
{
return Db.Queryable().Where(parm).First();
}
///
/// 根据条件查询分页数据
///
///
///
///
public PagedInfo GetPages(Expression> where, PagerInfo parm)
{
var source = Db.Queryable().Where(where);
return source.ToPage(parm);
}
public PagedInfo GetPages(Expression> where, PagerInfo parm, Expression> order, string orderEnum = "Asc")
{
var source = Db.Queryable().Where(where).OrderByIF(orderEnum == "Asc", order, OrderByType.Asc).OrderByIF(orderEnum == "Desc", order, OrderByType.Desc);
return source.ToPage(parm);
}
///
/// 根据条件查询数据
///
/// 条件表达式树
///
public List GetWhere(Expression> where, bool useCache = false, int cacheSecond = 3600)
{
var query = Db.Queryable().Where(where).WithCacheIF(useCache, cacheSecond);
return query.ToList();
}
///
/// 根据条件查询数据
///
/// 条件表达式树
///
public List GetWhere(Expression> where, Expression> order, string orderEnum = "Asc", bool useCache = false, int cacheSecond = 3600)
{
var query = Db.Queryable().Where(where).OrderByIF(orderEnum == "Asc", order, OrderByType.Asc).OrderByIF(orderEnum == "Desc", order, OrderByType.Desc).WithCacheIF(useCache, cacheSecond);
return query.ToList();
}
#endregion
#region 修改操作
///
/// 修改一条数据
///
/// T
///
public int Update(T parm)
{
return Db.Updateable(parm).RemoveDataCache().ExecuteCommand();
}
///
/// 批量修改
///
/// T
///
public int Update(List parm)
{
return Db.Updateable(parm).RemoveDataCache().ExecuteCommand();
}
///
/// 按查询条件更新
///
///
///
///
public int Update(Expression> where, Expression> columns)
{
return Db.Updateable().SetColumns(columns).Where(where).RemoveDataCache().ExecuteCommand();
}
#endregion
#region 删除操作
///
/// 删除一条或多条数据
///
/// string
///
public int Delete(object id)
{
return Db.Deleteable(id).RemoveDataCache().ExecuteCommand();
}
///
/// 删除一条或多条数据
///
/// string
///
public int Delete(object[] ids)
{
return Db.Deleteable().In(ids).RemoveDataCache().ExecuteCommand();
}
///
/// 根据条件删除一条或多条数据
///
/// 过滤条件
///
public int Delete(Expression> where)
{
return Db.Deleteable().Where(where).RemoveDataCache().ExecuteCommand();
}
public int DeleteTable()
{
return Db.Deleteable().RemoveDataCache().ExecuteCommand();
}
#endregion
}
}