Метод доступа, который генерирует миграцию ядра - PullRequest
0 голосов
/ 10 марта 2019

Есть ли способ доступа к вызываемому методу, который создает миграцию базы данных при вызове Add-Migration в Entity Framework Core?

Это проект .NET Core 2.2, если это имеет значение.

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Для доступа к Migration вы можете реализовать MigrationsAssembly.

  1. Реализация 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;
        }
    }
    
  2. Регистрация ColumnOrderMigrationAssembly

    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection"))
            .ReplaceService<IMigrationsAssembly, ColumnOrderMigrationAssembly>());
    
  3. Включить 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 для ваших собственных требований.

0 голосов
/ 10 марта 2019

в проекте, где вы запускаете Add-Migration, есть папка с именем Migration, в которую добавляются классы Migration.Вы можете изменить порядок столбцов при повторном запуске миграции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...