protected void PerformFullTableCheck(IManageable model, string connectionToUse) { if (model.IsFullyValidated) { Logger.Info($"Table {model.Configuration.TableName} has already been validated with it's current state."); return; } Logger.Info($"Processing table {model.Configuration.TableName} using connection {connectionToUse}."); model.IsFullyValidated = true; string schema = Manager.ConnectionType == ConnectionTypes.MSSQL ? model.Configuration.Schema : ConsolidationTools.GetInitialCatalog(connectionToUse, true); string initialCatalog = ConsolidationTools.GetInitialCatalog(connectionToUse); Dictionary <string, ConstraintDefinition> constraints = GetConstraints(initialCatalog, schema, model.Configuration.TableName, connectionToUse); if (DoTableExist(initialCatalog, schema, model.Configuration.TableName, connectionToUse)) { ExecuteScalar(_creator.CreateQueryForTableAlteration(model, GetColumnDefinition(initialCatalog, model.Configuration.Schema, model.Configuration.TableName, connectionToUse), constraints), connectionToUse, false); } else { ExecuteScalar(_creator.CreateQueryForTableCreation(model), connectionToUse, false); } VerifyForeignTables(model, connectionToUse); string foreignKeyQuery = _creator.GetCreateForeignKeysQuery(model, constraints); if (!string.IsNullOrWhiteSpace(foreignKeyQuery)) { ExecuteScalar(foreignKeyQuery, connectionToUse, false); } }
protected void PerformStoredProcedureValidation <T>(TransactionTypes transactionType, QueryOptions queryOptions) where T : Cope <T>, IManageable, new() { TransactionTypes singleTransactionType; switch (transactionType) { case TransactionTypes.InsertMassive: singleTransactionType = TransactionTypes.Insert; break; case TransactionTypes.UpdateMassive: singleTransactionType = TransactionTypes.Update; break; case TransactionTypes.DeleteMassive: singleTransactionType = TransactionTypes.Delete; break; default: throw new NotSupportedException($"El tipo de transaccion {transactionType.ToString()} no puede ser utilizado con esta funcion."); } string schema = Manager.ConnectionType == ConnectionTypes.MSSQL ? Cope <T> .ModelComposition.Schema : ConsolidationTools.GetInitialCatalog(queryOptions.ConnectionToUse, true); if (!DoStoredProcedureExist(ConsolidationTools.GetInitialCatalog(queryOptions.ConnectionToUse), schema, $"{Manager.StoredProcedurePrefix}massive_operation", queryOptions.ConnectionToUse)) { ExecuteScalar(GetTransactionTextForProcedure <T>(transactionType, false), queryOptions.ConnectionToUse, false); } if (!DoStoredProcedureExist(ConsolidationTools.GetInitialCatalog(queryOptions.ConnectionToUse), schema, $"{Manager.StoredProcedurePrefix}{Cope<T>.ModelComposition.TableName}{GetFriendlyTransactionSuffix(singleTransactionType)}", queryOptions.ConnectionToUse)) { ExecuteScalar(GetTransactionTextForProcedure <T>(singleTransactionType, false), queryOptions.ConnectionToUse, false); } }
internal static void GetPrefixesAndSuffixes() { Logger.Info("Getting Manager configuration for prefixes and suffixes."); InsertSuffix = ConsolidationTools.GetValueFromConfiguration("InsertSuffix", ConfigurationTypes.AppSetting); UpdateSuffix = ConsolidationTools.GetValueFromConfiguration("UpdateSuffix", ConfigurationTypes.AppSetting); DeleteSuffix = ConsolidationTools.GetValueFromConfiguration("DeleteSuffix", ConfigurationTypes.AppSetting); StoredProcedurePrefix = ConsolidationTools.GetValueFromConfiguration("StoredProcedurePrefix", ConfigurationTypes.AppSetting); TablePrefix = ConsolidationTools.GetValueFromConfiguration("TablePrefix", ConfigurationTypes.AppSetting); }
private static string GetConnectionString(string connectionToUse) { try { return(ConsolidationTools.GetValueFromConfiguration(connectionToUse, ConfigurationTypes.ConnectionString)); } catch (ConfigurationErrorsException cee) { Logger.Error(cee); throw cee; } }
internal static void GetConfigurationSettings() { DefaultConnection = ConsolidationTools.GetValueFromConfiguration("DefaultConnection", ConfigurationTypes.AppSetting); DefaultSchema = ConsolidationTools.GetValueFromConfiguration("DefaultSchema", ConfigurationTypes.AppSetting); ConnectionType = (ConnectionTypes)Enum.Parse(typeof(ConnectionTypes), ConsolidationTools.GetValueFromConfiguration("ConnectionType", ConfigurationTypes.AppSetting)); AutoCreateStoredProcedures = bool.Parse(ConsolidationTools.GetValueFromConfiguration("AutoCreateStoredProcedures", ConfigurationTypes.AppSetting)); AutoCreateTables = bool.Parse(ConsolidationTools.GetValueFromConfiguration("AutoCreateTables", ConfigurationTypes.AppSetting)); EnableLogInDatabase = bool.Parse(ConsolidationTools.GetValueFromConfiguration("EnableLogInDatabase", ConfigurationTypes.AppSetting)); EnableLogInFile = bool.Parse(ConsolidationTools.GetValueFromConfiguration("EnableLogInFile", ConfigurationTypes.AppSetting)); ConstantTableConsolidation = bool.Parse(ConsolidationTools.GetValueFromConfiguration("ConstantTableConsolidation", ConfigurationTypes.AppSetting)); AutoAlterStoredProcedures = bool.Parse(ConsolidationTools.GetValueFromConfiguration("AutoAlterStoredProcedures", ConfigurationTypes.AppSetting)); AutoAlterTables = bool.Parse(ConsolidationTools.GetValueFromConfiguration("AutoAlterTables", ConfigurationTypes.AppSetting)); Logger.Info("Got Manager configuration settings."); }
/// <summary> /// Valida que no exista una sola propiedad con valor nulo. /// </summary> /// <returns>Regresa el objeto que fue validado.</returns> public static T Validate <T>(this T obj) { ConsolidationTools.PerformNullValidation(obj, true); return(obj); }
/// <summary> /// Valida que no exista una sola propiedad con valor nulo. /// </summary> /// <returns>Regresa True cuando el objeto tiene todas las propiedades asignadas.</returns> public static bool Validate(this object obj, bool throwError = true) { return(ConsolidationTools.PerformNullValidation(obj, throwError)); }
/// <summary> /// Asigna los valores proporcionados en las propiedades correspondientes a la instancia del objeto de tipo <typeparamref name="T"/>. Solo se aceptan valores originados desde un objeto anonimo o predefinidos del mismo tipo enviado. /// </summary> /// <typeparam name="T">El tipo del objeto a asignar.</typeparam> /// <param name="values">Los valores usados en la asignacion de las propiedades. Se admiten objetos anonimos o predefinidos del mismo tipo enviado.</param> /// <returns>Regresa el objeto ya alimentado de los valores.</returns> public static bool FillAndValidate <T>(this T obj, dynamic values) { return(Validate(ConsolidationTools.SetValuesIntoObjectOfType(obj, values), true)); }
/// <summary> /// Asigna los valores proporcionados en las propiedades correspondientes a la instancia del objeto de tipo <typeparamref name="T"/>. Solo se aceptan valores originados desde un objeto anonimo o predefinidos del mismo tipo enviado. /// </summary> /// <typeparam name="T">El tipo del objeto a asignar.</typeparam> /// <param name="values">Los valores usados en la asignacion de las propiedades. Se admiten objetos anonimos o predefinidos del mismo tipo enviado.</param> /// <returns>Regresa el objeto ya alimentado de los valores.</returns> public static T Fill <T>(this T obj, dynamic values) { return(ConsolidationTools.SetValuesIntoObjectOfType(obj, values)); }
private void VerifyForeignTables(IManageable model, string connectionToUse) { Logger.Info(string.Format("Verifying foreign tables for type {0} using connection {1}.", model.GetType().ToString(), connectionToUse)); foreach (KeyValuePair <string, PropertyInfo> property in model.Configuration.ForeignKeyProperties) { IManageable foreignModel = (IManageable)Activator.CreateInstance(model.Configuration.ForeignKeyAttributes[property.Value.Name].Model); string schema = Manager.ConnectionType == ConnectionTypes.MSSQL ? foreignModel.Configuration.Schema : ConsolidationTools.GetInitialCatalog(connectionToUse, true); PerformFullTableCheck(foreignModel, connectionToUse); } }