#c# #asp.net-core #entity-framework-core
#c# #asp.net-core #entity-framework-core
Вопрос:
Можно ли каким-либо образом получить доступ к вызываемому методу, который создает миграцию базы данных при вызове Add-Migration
в Entity Framework Core?
Это в проекте .NET Core 2.2, если это имеет значение.
Комментарии:
1. зачем вам нужен доступ к нему?
2. Потому что я хотел бы изменить порядок создаваемых столбцов.
Ответ №1:
Для доступа к Migration
вы могли бы реализовать MigrationsAssembly
.
-
Реализовать
ColumnOrderMigrationAssembly
public class ColumnOrderMigrationAssembly : MigrationsAssembly { private readonly DbContext _context; public ColumnOrderMigrationAssembly(ICurrentDbContext currentContext, IDbContextOptions options, IMigrationsIdGenerator idGenerator, IDiagnosticsLogger<DbLoggerCategory.Migrations> logger) : base(currentContext, options, idGenerator, logger) { _context = currentContext.Context; } public override Migration CreateMigration(TypeInfo migrationClass, string activeProvider) { var migration = base.CreateMigration(migrationClass, activeProvider); var productTableMigration = migration.UpOperations.FirstOrDefault(m => m.GetType() == typeof(CreateTableOperation) amp;amp; ((CreateTableOperation)m).Name == "Products") as CreateTableOperation; if (productTableMigration != null) { var columns =new List<AddColumnOperation>(productTableMigration.Columns.OrderBy(o => o.Name)); productTableMigration.Columns.Clear(); productTableMigration.Columns.AddRange(columns); } return migration; } }
-
Регистрация
ColumnOrderMigrationAssembly
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection")) .ReplaceService<IMigrationsAssembly, ColumnOrderMigrationAssembly>());
-
Включить
migrate
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider) { //your rest code using (var db = serviceProvider.CreateScope().ServiceProvider.GetRequiredService<ApplicationDbContext>()) { db.Database.Migrate(); } }
Измените логику в
CreateMigration
в соответствии с вашими собственными требованиями.
Комментарии:
1. Это именно то, что мне было нужно. Спасибо @TaoZhou
Ответ №2:
в проекте, в котором вы запускаете Add-Migration, есть папка под названием Migration, в нее добавляются классы миграции. Вы можете изменить порядок столбцов при повторном запуске миграции.
Комментарии:
1. Когда у вас более 100 таблиц, я чертовски уверен, что не собираюсь вручную обновлять файл миграции.