예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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;
                        }
                    }
                }
            }
        }