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}."); } }
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); } }
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); }