Собственная кастомная логика создания миграций

Редактировал(а) Alexandr Fokin 2023/08/12 10:40

1)Пользовательские операции миграции
https://learn.microsoft.com/ru-ru/ef/core/managing-schemas/migrations/operations
2)

Реализация (и встраивание) собственного ICSharpMigrationOperationGenerator (например можно использовать подход на основе декоратора).
Реализация (и встраивание) собственного SqlServerMigrationsSqlGenerator.

How to customize migration generation in EF Core Code First?
https://stackoverflow.com/questions/63575132/how-to-customize-migration-generation-in-ef-core-code-first

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations.Design;
using Microsoft.EntityFrameworkCore.Migrations.Operations;

namespace model.db.migrationModel
{
   public class MigrationGeneratorDecarator
        : ICSharpMigrationOperationGenerator
    {
       private readonly ICSharpMigrationOperationGenerator _source;
       private readonly CSharpMigrationOperationGeneratorDependencies _dependencies;


       public MigrationGeneratorDecarator(
            ICSharpMigrationOperationGenerator source,
            CSharpMigrationOperationGeneratorDependencies dependencies
            )
        {
            _source = source;
            _dependencies = dependencies;
        }


       public void Generate(
           string builderName,
            IReadOnlyList<MigrationOperation> operations,
            IndentedStringBuilder builder
            )
        {
            _source.Generate(
                builderName,
                operations,
                builder
                );

            GenerateAdditional(
                builderName,
                operations,
                builder
                );
        }


       private void GenerateAdditional(
           string builderName,
            IReadOnlyList<MigrationOperation> operations,
            IndentedStringBuilder builder
            )
        {
            Debugger.Launch();

           //builder.AppendLine("MyQeury text");

           var code = BuildInsertQuery();
            builder.Append(code);
        }        
    }
}
Теги: