/// <summary> /// Merge the user configuration with the default metadatas from the servers. /// </summary> /// <param name="metadatas">Metadatas to generate queries for.</param> /// <param name="behavior">A behavior for cloning data</param> /// <param name="variables">The compiled cascade variables</param> private static void MergeForeignKey(this Metadatas metadatas, Behavior behavior, HashSet <SchemaVar> variables) { if (behavior == null) { return; } foreach (var dbSettings in behavior.DbSettings) { var dbSettingsVar = variables.First(v => v.Id == dbSettings.ForSchemaId); if (!metadatas.ContainsKey(dbSettingsVar.Server)) { continue; } var server = metadatas[dbSettingsVar.Server]; if (!server.ContainsKey(dbSettingsVar.Database)) { continue; } var database = server[dbSettingsVar.Database]; if (!database.ContainsKey(dbSettingsVar.Schema)) { continue; } var schema = database[dbSettingsVar.Schema]; MergeFkModifierSchema(schema, dbSettings, variables); } }
/// <summary> /// Merge a user behavior with the default metadatas. /// </summary> /// <param name="metadatas">Metadatas to generate queries for.</param> /// <param name="behavior">A behavior for cloning data</param> /// <param name="variables">The compiled cascade variables</param> private static void MergeBehaviour(this Metadatas metadatas, Behavior behavior, HashSet <SchemaVar> variables) { if (behavior == null) { return; } foreach (var dbSettings in behavior.DbSettings) { var dbSettingsVar = variables.First(v => v.Id == dbSettings.ForSchemaId); if (!metadatas.ContainsKey(dbSettingsVar.Server)) { continue; } var server = metadatas[dbSettingsVar.Server]; if (!server.ContainsKey(dbSettingsVar.Database)) { continue; } var database = server[dbSettingsVar.Database]; if (!database.ContainsKey(dbSettingsVar.Schema)) { continue; } var schema = database[dbSettingsVar.Schema]; foreach (var dbSettingsTable in dbSettings.Tables) { var table = schema.FirstOrDefault(t => t.Name.Equals(dbSettingsTable.Name, StringComparison.CurrentCultureIgnoreCase)); if (table == null) { continue; } //On affecte les changements de la configuration table.IsStatic = dbSettingsTable.IsStatic == NullableBool.True; //Derivative tables var globalAccess = dbSettingsTable.DerativeTableGlobal.GlobalAccess; var globalCascade = dbSettingsTable.DerativeTableGlobal.GlobalCascade; //Default settings foreach (var derivTbl in table.DerivativeTables) { derivTbl.Access = globalAccess; derivTbl.Cascade = globalCascade == NullableBool.True; } //Override if modified foreach (var dbSettingsDerivativeTable in dbSettingsTable.DerativeTableGlobal.DerivativeTables) { var destinationVar = variables.First(v => v.Id == dbSettingsDerivativeTable.DestinationSchema); var derivativeTable = table.DerivativeTables.FirstOrDefault(t => t.ServerId == destinationVar.Server && t.Database.Equals(destinationVar.Database, StringComparison.OrdinalIgnoreCase) && t.Schema.Equals(destinationVar.Schema, StringComparison.OrdinalIgnoreCase) && t.Table.Equals(dbSettingsDerivativeTable.Name, StringComparison.OrdinalIgnoreCase)); if (derivativeTable == null) { continue; } derivativeTable.Access = dbSettingsDerivativeTable.Access; derivativeTable.Cascade = dbSettingsDerivativeTable.Cascade == NullableBool.True; } //Data builder foreach (var builderCol in dbSettingsTable.DataBuilders) { var col = table.ColumnsDefinition.FirstOrDefault(c => c.Name.Equals(builderCol.Name, StringComparison.OrdinalIgnoreCase)); if (col != null) { col.BuilderName = builderCol.BuilderName; } } } } }