Skip to content

Build a better way to manage custom migration operations #34708

Open

Description

Problem:
Currently, it is common to call .Sql(), or make an extension method for MigrationBuilder, and call inside some generated migration when we need to execute some custom operation using the migration feature. That can become a problem on a scenario where resetting the migration history is required, since one would have to review all migrations in search of custom calls.

Seeding of data, creation of procedures, views, full-text catalogs and any other model changes operation that is not natively supported by Entity Framework Core can be easily lost.

Proposal:
What I propose is that we build a feature for managing custom commands similar to entities fluent API configuration and EF should include these custom commands in the migrations and snapshot as well update when something changes.

So, just like we can do:
modelBuilder.Entity<SomeEntity>().SomeConfiguration();

Or:

public void SomeEntityConfiguration : IEntityTypeConfiguration<SomeEntity>
{
    public void Configure(EntityTypeBuilder<SomeEntity> builder)
    {
        builder.SomeConfiguration();
    }
}

We would do:
modelBuilder.Custom<CustomTypeIdentifier>().RunSql("CREATE FULLTEXT CATALOG ftCatalog AS DEFAULT;");

Or:

public void SomeEntityConfiguration : ICustomTypeConfiguration<CustomTypeIdentifier>
{
    public void Configure(CustomTypeBuilder<CustomTypeIdentifier> builder)
    {
        builder.RunSql("CREATE FULLTEXT CATALOG ftCatalog AS DEFAULT;");
    }
}

Please do not get too attached to my poor example. It is just a way I found to relate to fluent entity configuration.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions