using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.Const;
using WIDESEAWCS_Core.DB;
using WIDESEAWCS_Core.Helper;
namespace WIDESEAWCS_Core.Seed
{
public class DBContext
{
private static MutiDBOperate connectObject => GetMainConnectionDb();
private static string _connectionString = connectObject.Connection;
private static DbType _dbType = (DbType)connectObject.DbType;
public static string ConnId = connectObject.ConnId;
private SqlSugarScope _db;
///
/// 连接字符串
///
public static MutiDBOperate GetMainConnectionDb()
{
MutiDBOperate mainDb = new MutiDBOperate()
{
Connection = AppSettings.app(MainDb.ConnectionString).DecryptDES(AppSecret.DB),
ConnId = MainDb.CurrentDbConnId,
DbType = DataBaseType.SqlServer
};
return mainDb;
}
///
/// 连接字符串
///
public static string ConnectionString
{
get { return _connectionString; }
set { _connectionString = value; }
}
///
/// 数据库类型
///
public static DbType DbType
{
get { return _dbType; }
set { _dbType = value; }
}
///
/// 数据连接对象
///
public SqlSugarScope Db
{
get { return _db; }
private set { _db = value; }
}
//public SqlSugarScope DbClient
//{
// get { return _dbClient; }
// private set { _dbClient = value; }
//}
///
/// 功能描述:构造函数
///
public DBContext(ISqlSugarClient sqlSugarClient)
{
if (string.IsNullOrEmpty(_connectionString))
throw new ArgumentNullException("数据库连接字符串为空");
_db = sqlSugarClient as SqlSugarScope;
//_db.Aop.DataExecuting = SqlSugarAop.DataExecuting;
}
#region 实例方法
///
/// 功能描述:获取数据库处理对象
///
/// 返回值
public SimpleClient GetEntityDB() where T : class, new()
{
return new SimpleClient(_db);
}
///
/// 功能描述:获取数据库处理对象
///
/// db
/// 返回值
//public SimpleClient GetEntityDB(SqlSugarClient db) where T : class, new()
//{
// return new SimpleClient(db);
//}
#endregion
#region 根据实体类生成数据库表
///
/// 功能描述:根据实体类生成数据库表
///
/// 是否备份表
/// 指定的实体
public void CreateTableByEntity(bool blnBackupTable, params T[] lstEntitys) where T : class, new()
{
Type[] lstTypes = null;
if (lstEntitys != null)
{
lstTypes = new Type[lstEntitys.Length];
for (int i = 0; i < lstEntitys.Length; i++)
{
T t = lstEntitys[i];
lstTypes[i] = typeof(T);
}
}
CreateTableByEntity(blnBackupTable, lstTypes);
}
///
/// 功能描述:根据实体类生成数据库表
///
/// 是否备份表
/// 指定的实体
public void CreateTableByEntity(bool blnBackupTable, params Type[] lstEntitys)
{
if (blnBackupTable)
{
_db.CodeFirst.BackupTable().InitTables(lstEntitys); //change entity backupTable
}
else
{
_db.CodeFirst.InitTables(lstEntitys);
}
}
#endregion
#region 静态方法
/////
///// 功能描述:获得一个DbContext
/////
/////
//public static MyContext GetDbContext()
//{
// return new MyContext();
//}
///
/// 功能描述:设置初始化参数
///
/// 连接字符串
/// 数据库类型
public static void Init(string strConnectionString, DbType enmDbType = SqlSugar.DbType.SqlServer)
{
_connectionString = strConnectionString;
_dbType = enmDbType;
}
///
/// 功能描述:创建一个链接配置
///
/// 是否自动关闭连接
/// 是否夸类事务
/// ConnectionConfig
public static ConnectionConfig GetConnectionConfig(bool blnIsAutoCloseConnection = true, bool blnIsShardSameThread = false)
{
ConnectionConfig config = new ConnectionConfig()
{
ConnectionString = _connectionString,
DbType = _dbType,
IsAutoCloseConnection = blnIsAutoCloseConnection,
ConfigureExternalServices = new ConfigureExternalServices()
{
//DataInfoCacheService = new HttpRuntimeCache()
},
//IsShardSameThread = blnIsShardSameThread
};
return config;
}
///
/// 功能描述:获取一个自定义的DB
///
/// config
/// 返回值
public static SqlSugarScope GetCustomDB(ConnectionConfig config)
{
return new SqlSugarScope(config);
}
///
/// 功能描述:获取一个自定义的数据库处理对象
///
/// sugarClient
/// 返回值
//public static SqlSugarScope GetCustomEntityDB(SqlSugarScope sugarClient) where T : class, new()
//{
// return new SqlSugarScope(sugarClient);
//}
///
/// 功能描述:获取一个自定义的数据库处理对象
///
/// config
/// 返回值
//public static SimpleClient GetCustomEntityDB(ConnectionConfig config) where T : class, new()
//{
// SqlSugarScope sugarClient = GetCustomDB(config);
// return GetCustomEntityDB(sugarClient);
//}
#endregion
}
}