Ejemplo n.º 1
0
        private void FixOnModelCreatingForTable(CreateTableOperation table, [CanBeNull] GetModelTableNameDelegate getModelTableName)
        {
            if (table == null)
            {
                throw new ArgumentNullException(nameof(table));
            }
            if (_info == null)
            {
                throw new NullReferenceException(nameof(_info));
            }
            var tn = new FullTableName(table.Name, table.Schema).WithDefaultSchema(_info.DefaultSchema);

            if (getModelTableName != null)
            {
                tn = getModelTableName(tn);
            }
            var entity = _info.GetByTableName(tn);

            if (entity == null)
            {
                Log(nameof(FixOnModelCreatingForTable),
                    $"Table {table.Name} not found. Skipping.");
                return;
            }

            var colsDic = entity
                          .Properites
                          .Where(info => !info.IsNotMapped && !info.IsNavigationProperty)
                          .ToDictionary(a => a.ColumnName, StringComparer.OrdinalIgnoreCase);
            var natural = Enumerable.Range(0, table.Columns.Count).ToDictionary(a => table.Columns[a].Name, a => a);

            string GetSortColumns()
            {
                return("(" + string.Join(",", table.Columns.Select(a => a.Name)) + ")");
            }

            var sortBefore = GetSortColumns();

            table.Columns.Sort((a, b) =>
            {
                colsDic.TryGetValue(a.Name, out var aWrapper);
                colsDic.TryGetValue(b.Name, out var bWrapper);
                var compareResult = ComparePropertyWrapper(aWrapper, bWrapper);
                if (compareResult != 0)
                {
                    return(compareResult);
                }
                return(natural[a.Name].CompareTo(natural[b.Name])); // bez zmian
            });
            var sortAfter = GetSortColumns();

            if (sortBefore != sortAfter)
            {
                Log(nameof(FixOnModelCreatingForTable),
                    $"Table {table.Name} change column order {sortBefore} => {sortAfter}.");
            }
        }
Ejemplo n.º 2
0
        public void FixMigrationUp(MigrationBuilder migrationBuilder, [CanBeNull] GetModelTableNameDelegate getModelTableName)
        {
            var services = _shamanOptions?.Services.OfType <IFixMigrationUpService>().ToArray();

            if (services != null)
            {
                foreach (var service in services)
                {
                    Log(nameof(FixMigrationUp), $"calling service {service}");
                    service.FixMigrationUp(migrationBuilder, _info);
                }
            }

            foreach (var table in migrationBuilder.Operations.OfType <CreateTableOperation>())
            {
                FixOnModelCreatingForTable(table, getModelTableName);
            }
        }
Ejemplo n.º 3
0
        public static void FixMigrationUp <T>(MigrationBuilder migrationBuilder, ShamanOptions shamanOptions = null, [CanBeNull] GetModelTableNameDelegate getModelTableName = null)
            where T : DbContext
        {
            var tmp = new MigrationFixer(typeof(T), shamanOptions);

            tmp.FixMigrationUp(migrationBuilder, getModelTableName);
        }