/******************************************************************************* * Copyright © 2020 HT.Cloud.Framework 版权所有 * Author: HT.Cloud * Description: WaterCloud快速开发平台 * Website: *********************************************************************************/ using SqlSugar; using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Threading.Tasks; using HT.Cloud.Code; namespace HT.Cloud.DataBase { /// /// 泛型仓储实现 /// /// public class RepositoryBase where TEntity : class, new() { // 用于其他表操作 public ITenant Tenant { get { return _tenant; } } private ITenant _tenant; private SqlSugarScopeProvider _db; public SqlSugarScopeProvider Db { get { return _db; } } /// /// 切换上下文,不传参切换到实体租户 /// /// /// public ISqlSugarClient ChangeEntityDb(object configId = null) { if (!configId.IsEmpty()) { _db = _tenant.GetConnectionScope(configId); } else { _db = _tenant.GetConnectionScopeWithAttr(); } return _db; } public RepositoryBase(ISqlSugarClient scope) { _tenant = scope.AsTenant(); _db = Tenant.GetConnectionScopeWithAttr(); } public async Task Insert(TEntity entity) { return await _db.Insertable(entity).ExecuteReturnEntityAsync(); } public async Task Insert(List entitys) { return await _db.Insertable(entitys).ExecuteCommandAsync(); } public async Task Update(TEntity entity) { return await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); } public async Task Update(Expression> predicate, Expression> content) { return await _db.Updateable(content).Where(predicate).ExecuteCommandAsync(); } public async Task Delete(TEntity entity) { return await _db.Deleteable(entity).ExecuteCommandAsync(); } public async Task Delete(Expression> predicate) { return await _db.Deleteable(predicate).ExecuteCommandAsync(); } public async Task FindEntity(object keyValue) { return await IQueryable().InSingleAsync(keyValue); } public async Task FindEntity(Expression> predicate) { return await IQueryable().FirstAsync(predicate); } public ISugarQueryable IQueryable() { return _db.Queryable(); } public ISugarQueryable IQueryable(Expression> predicate) { return IQueryable().Where(predicate); } public ISugarQueryable IQueryable(string strSql) { return _db.SqlQueryable(strSql); } } }