/*******************************************************************************
* 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);
}
}
}