/// <summary> /// 数据库架构处理。 /// </summary> /// <param name="context">上下文对象。</param> public DatabaseSchemaProcessResults Process(DatabaseSchemaContext context) { string fullName = TypeExtensions.FullName2(this.GetType()); if (!_attribute.IsValid) { context.Log.Warning("{0}.Attribute.IsValid=false,[{1}]{2},{3}", fullName, _attribute.Order, _attribute.TableName, _attribute.Description); return(DatabaseSchemaProcessResults.Ignore); } context.DataContext.ChangeDatabase(); context.Log.Info("执行 [{0} {1}] {2} {3} {4}", EnumExtensions.ToName(_attribute.Type).PadRight(6, ' '), _attribute.Order.ToString().PadRight(8, ' '), _attribute.TableName.PadRight(32, ' '), _attribute.Description.PadRight(32, ' '), fullName); DatabaseSchemaProcessResults result; try { result = OnProcess(context); context.Log.Info(" [{0}] {1}", EnumExtensions.ToName(result), fullName); } catch (System.Exception error) { result = DatabaseSchemaProcessResults.Error; context.Log.Info(" [{0}] {1}", EnumExtensions.ToName(result), fullName); context.Log.Error(LogBase.ExceptionToString(error)); } return(result); }
/// <summary> /// 数据库架构处理(内部开启事务,一旦有错误,自动回滚)。 /// </summary> /// <param name="context">上下文对象。</param> /// <returns>返回是否执行成功。</returns> public bool Process(DatabaseSchemaContext context) { System.Collections.Generic.List <DatabaseSchemaHandler> list = Sort(); context.Log.Info("数据库架构 {0}项", list.Count); context.Log.Info("数据库架构处理[{0}] 开始", context.DataContext.Connection.DatabaseName); bool success = true; int[] counts = new int[3]; int t = Environment.TickCount; foreach (DatabaseSchemaHandler item in list.FindAll(p => p.Attribute.Type == DatabaseSchemaTypes.TableSpace)) { DatabaseSchemaProcessResults result = item.Process(context); counts[(int)result]++; if (result == DatabaseSchemaProcessResults.Error) { success = false; } } { context.DataContext.BeginTransaction(); foreach (DatabaseSchemaHandler item in list.FindAll(p => p.Attribute.Type != DatabaseSchemaTypes.TableSpace)) { DatabaseSchemaProcessResults result = item.Process(context); counts[(int)result]++; if (result == DatabaseSchemaProcessResults.Error) { success = false; } } context.Log.Info("数据库架构处理[{0}] 成功:{1},错误:{2},忽略:{3}", context.DataContext.Connection.DatabaseName, counts[0], counts[1], counts[2]); if (!success) { context.Log.Info("数据库架构处理[{0}] 回滚", context.DataContext.Connection.DatabaseName); context.DataContext.RollbackTransaction(); } else { context.Log.Info("数据库架构处理[{0}] 提交", context.DataContext.Connection.DatabaseName); context.DataContext.CommitTransaction(); } } t = Environment.TickCount - t; context.Log.Info("数据库架构处理[{0}] 完成,用时{1}ms", context.DataContext.Connection.DatabaseName, t); return(success); }
/// <summary> /// 数据库架构处理。 /// </summary> /// <param name="context">上下文对象。</param> /// <returns>返回处理结果。</returns> protected abstract DatabaseSchemaProcessResults OnProcess(DatabaseSchemaContext context);