Есть ли способ доступа к вызываемому методу, который создает миграцию базы данных при вызове Add-Migration в Entity Framework Core?
Add-Migration
Это проект .NET Core 2.2, если это имеет значение.
Для доступа к Migration вы можете реализовать MigrationsAssembly.
Migration
MigrationsAssembly
Реализация ColumnOrderMigrationAssembly
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) && ((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
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 для ваших собственных требований.
CreateMigration
в проекте, где вы запускаете Add-Migration, есть папка с именем Migration, в которую добавляются классы Migration.Вы можете изменить порядок столбцов при повторном запуске миграции.