Files
HTCloud/HT.Cloud.Data/Repository/RepositoryBase.cs
2023-03-03 16:07:50 +08:00

117 lines
2.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*******************************************************************************
* 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
{
/// <summary>
/// 泛型仓储实现
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public class RepositoryBase<TEntity> where TEntity : class, new()
{
// 用于其他表操作
public ITenant Tenant
{
get { return _tenant; }
}
private ITenant _tenant;
private SqlSugarScopeProvider _db;
public SqlSugarScopeProvider Db
{
get { return _db; }
}
/// <summary>
/// 切换上下文,不传参切换到实体租户
/// </summary>
/// <param name="configId"></param>
/// <returns></returns>
public ISqlSugarClient ChangeEntityDb(object configId = null)
{
if (!configId.IsEmpty())
{
_db = _tenant.GetConnectionScope(configId);
}
else
{
_db = _tenant.GetConnectionScopeWithAttr<TEntity>();
}
return _db;
}
public RepositoryBase(ISqlSugarClient scope)
{
_tenant = scope.AsTenant();
_db = Tenant.GetConnectionScopeWithAttr<TEntity>();
}
public async Task<TEntity> Insert(TEntity entity)
{
return await _db.Insertable(entity).ExecuteReturnEntityAsync();
}
public async Task<int> Insert(List<TEntity> entitys)
{
return await _db.Insertable(entitys).ExecuteCommandAsync();
}
public async Task<int> Update(TEntity entity)
{
return await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
}
public async Task<int> Update(Expression<Func<TEntity, bool>> predicate, Expression<Func<TEntity, TEntity>> content)
{
return await _db.Updateable(content).Where(predicate).ExecuteCommandAsync();
}
public async Task<int> Delete(TEntity entity)
{
return await _db.Deleteable(entity).ExecuteCommandAsync();
}
public async Task<int> Delete(Expression<Func<TEntity, bool>> predicate)
{
return await _db.Deleteable(predicate).ExecuteCommandAsync();
}
public async Task<TEntity> FindEntity(object keyValue)
{
return await IQueryable().InSingleAsync(keyValue);
}
public async Task<TEntity> FindEntity(Expression<Func<TEntity, bool>> predicate)
{
return await IQueryable().FirstAsync(predicate);
}
public ISugarQueryable<TEntity> IQueryable()
{
return _db.Queryable<TEntity>();
}
public ISugarQueryable<TEntity> IQueryable(Expression<Func<TEntity, bool>> predicate)
{
return IQueryable().Where(predicate);
}
public ISugarQueryable<TEntity> IQueryable(string strSql)
{
return _db.SqlQueryable<TEntity>(strSql);
}
}
}