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.