/// <summary> /// 连接字符串,xql命令集合,对象 /// </summary> /// <param name="ormDataBase"></param> /// <param name="infos"></param> /// <param name="saveCompiler"></param> public SqlServerUnitofwork(OrmDataBaseInfo ormDataBase, IList <SaveInfo> infos, ISaveCompiler saveCompiler) { Connection = new SqlConnection(ormDataBase.ConnnectString); OrmDataBase = ormDataBase; Infos = infos; SaveCompiler = saveCompiler; }
/// <summary> /// 检查连接一次 /// </summary> /// <param name="ormDataBase"></param> protected virtual void CheckConnectionAlive <T>(OrmDataBaseInfo ormDataBase) where T : DbConnection { lock (CheckAliveLocker) { if (ormDataBase.IsStartCheckAlive || !ormDataBase.IsException) { return; } ormDataBase.IsStartCheckAlive = true; } System.Threading.Thread.Sleep(ormDataBase.CheckAlivePeriod); try { using (var sqlcon = CreateTryConnection <T>(ormDataBase)) { sqlcon.ConnectionString = string.Format("{0};Connect Timeout=2000;", ormDataBase.ConnnectString); sqlcon.Open(); sqlcon.Close(); ormDataBase.IsException = false; ormDataBase.IsStartCheckAlive = false; } } catch (Exception ex) { Log.AddException(ex); ormDataBase.IsException = true; ormDataBase.IsStartCheckAlive = false; Action <OrmDataBaseInfo> action = CheckConnectionAlive <T>; action.BeginInvoke(ormDataBase, null, null); } }
/// <summary> /// 得到事务 /// </summary> /// <param name="ormDataBase"></param> /// <param name="infos"></param> /// <param name="unitOfWorks"></param> /// <returns></returns> public override void AddUnitofwork(OrmDataBaseInfo ormDataBase, IList <SaveInfo> infos, IList <IUnitofwork> unitOfWorks) { foreach (var unitOfWork in unitOfWorks) { if (unitOfWork.GetHashCode() == ormDataBase.ConnnectString.GetHashCode()) { var tunitofwork = (UnitofworkBase)unitOfWork; var tempKeys = new Dictionary <SaveInfo, SaveInfo>(infos.Count); foreach (var info in tunitofwork.Infos) { tempKeys.Add(info, info); } foreach (var info in infos) { if (!tempKeys.ContainsKey(info)) { tempKeys.Add(info, info); } } tunitofwork.Infos = tempKeys.Values.ToList(); return; } } unitOfWorks.Add(new SqlServerUnitofwork(ormDataBase, infos, SaveCompiler)); }
/// <summary> /// 获取对象 /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public override T GetInfos <T>(OrmDataBaseInfo ormDataBase, OrmObjectInfo obj, QueryInfo query) { if (obj == null) { return(default(T)); } var cmd = new SqlCommand(); Translate(cmd, obj, query); return(GetInfosByCommand <T>(ormDataBase, obj, cmd, query)); }
/// <summary> /// CommandInfo得到返回结果 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="ormDataBase"></param> /// <param name="obj"></param> /// <param name="cmd"></param> /// <param name="query"></param> /// <returns></returns> protected virtual T GetInfosByCommand <T>(OrmDataBaseInfo ormDataBase, OrmObjectInfo obj, SqlCommand cmd, QueryInfo query) { if (string.IsNullOrEmpty(cmd.CommandText)) { return(default(T)); } using (var sqlcon = GetConnnection <SqlConnection>(ormDataBase.GetAllGetOrmDataBase(), query)) { cmd.Connection = sqlcon; return(GetInfosByType <T>(query, obj, cmd)); } }
/// <summary> /// 得到结果 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <param name="query"></param> /// <param name="context"></param> /// <param name="isLazyLoadExecute"></param> /// <returns></returns> protected virtual T GetResult <T>(OrmObjectInfo obj, QueryInfo query, IContext context, bool isLazyLoadExecute = false) { OrmDataBaseInfo db = DataBase.GetDataBase(query.GetDataBase).GetAllGetOrmDataBase().FirstOrDefault(); var result = ExecuteQuery <T>(query, obj, db); if (query.IsLazyLoad) { LazyLoad(result, obj, context, isLazyLoadExecute); } RemoteLoad(result, query.RemoteQueries == null ? null : query.RemoteQueries.Values.ToList(), obj, isLazyLoadExecute); return(result); }
/// <summary> /// 执行查询存储过程 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="ormDataBase"></param> /// <param name="commandText"></param> /// <param name="commandType"></param> /// <param name="parameters"></param> /// <returns></returns> public override T ExecuteQuery <T>(OrmDataBaseInfo ormDataBase, string commandText, CommandType commandType, params object[] parameters) { if (string.IsNullOrEmpty(commandText) || ormDataBase == null) { return(default(T)); } using (var sqlcon = GetConnnection <SqlConnection>(ormDataBase.GetAllGetOrmDataBase(), null)) { var sqlcmd = new SqlCommand(); sqlcmd = FillCommandTypeCommand(sqlcmd, commandText, commandType, parameters); sqlcmd.Connection = sqlcon; return(GetInfosByType <T>(null, null, sqlcmd)); } }
/// <summary> /// 执行存储过程 /// </summary> /// <param name="ormDataBase"></param> /// <param name="commandText"></param> /// <param name="commandType"></param> /// <param name="parameters"></param> /// <returns></returns> public override int ExecuteCommand(OrmDataBaseInfo ormDataBase, string commandText, CommandType commandType, params object[] parameters) { if (string.IsNullOrEmpty(commandText) || ormDataBase == null) { return(0); } using (var sqlcon = GetConnnection <SqlConnection>(ormDataBase.GetAllSetOrmDataBase(), null)) { var sqlcmd = new SqlCommand(); sqlcmd = FillCommandTypeCommand(sqlcmd, commandText, commandType, parameters); sqlcmd.Connection = sqlcon; return(sqlcmd.ExecuteNonQuery()); } }
/// <summary> /// 查询故障转移 /// </summary> /// <param name="ormDataBase"></param> /// <returns></returns> protected virtual T TryGetConnection <T>(OrmDataBaseInfo ormDataBase) where T : DbConnection { var sqlcon = CreateTryConnection <T>(ormDataBase); try { if (sqlcon.State != ConnectionState.Open) { sqlcon.Open(); } ormDataBase.UseConnect(); return(sqlcon); } catch (Exception) { ormDataBase.IsException = true; return(null); } }
/// <summary> /// 查询故障转移 /// </summary> /// <param name="ormDataBase"></param> /// <returns></returns> protected virtual T TryGetConnection <T>(OrmDataBaseInfo ormDataBase) where T : DbConnection { var sqlcon = CreateTryConnection <T>(ormDataBase); try { if (sqlcon.State != ConnectionState.Open) { sqlcon.Open(); } ormDataBase.UseConnect(); return(sqlcon); } catch (Exception ex) { Log.AddException(ex); ormDataBase.IsException = true; Action <OrmDataBaseInfo> action = CheckConnectionAlive <T>; action.BeginInvoke(ormDataBase, null, null); return(null); } }
/// <summary> /// 执行存储过程 /// </summary> /// <param name="ormDataBase"></param> /// <param name="commandText"></param> /// <param name="commandType"></param> /// <param name="parameters"></param> /// <returns></returns> public abstract int ExecuteCommand(OrmDataBaseInfo ormDataBase, string commandText, CommandType commandType, params object[] parameters);
/// <summary> /// 执行查询存储过程 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="ormDataBase"></param> /// <param name="commandText"></param> /// <param name="commandType"></param> /// <param name="parameters"></param> /// <returns></returns> public abstract T ExecuteQuery <T>(OrmDataBaseInfo ormDataBase, string commandText, CommandType commandType, params object[] parameters);
/// <summary> /// 得到事务 /// </summary> /// <param name="ormDataBase"></param> /// <param name="infos"></param> /// <param name="unitOfWorks"></param> public abstract void AddUnitofwork(OrmDataBaseInfo ormDataBase, IList <SaveInfo> infos, IList <IUnitofwork> unitOfWorks);
/// <summary> /// 获取对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="ormDataBase"></param> /// <param name="obj"></param> /// <param name="query"></param> /// <returns></returns> public abstract T GetInfos <T>(OrmDataBaseInfo ormDataBase, OrmObjectInfo obj, QueryInfo query);
/// <summary> /// 创建连接 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="ormDataBase"></param> /// <returns></returns> protected virtual T CreateTryConnection <T>(OrmDataBaseInfo ormDataBase) where T : DbConnection { return(default(T)); }
/// <summary> /// 执行查询 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="query"></param> /// <param name="obj"></param> /// <param name="db"></param> /// <returns></returns> protected virtual T ExecuteQuery <T>(QueryInfo query, OrmObjectInfo obj, OrmDataBaseInfo db) { var compiler = DataBase.GetCompiler(db); return(compiler.GetInfos <T>(db, obj, query)); }
/// <summary> /// 重写 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="ormDataBase"></param> /// <returns></returns> protected override T CreateTryConnection <T>(OrmDataBaseInfo ormDataBase) { return(new SqlConnection(ormDataBase.ConnnectString) as T); }