Problem Statement: In our project, we use code first approach to generate migrations. I see one feature which I couldn’t control through Fluent API.
EF core is generating indexes on foreign keys. I see this as default behavior but I always like to have control in creating indexes.
Asp.Net Core 2.2 API with EF Core.
I can go and delete unwanted indexes after every migration is generated but this manual step might be missed one day, so I started looking for automating this.
I found EF core configuration has given the option to replace one of its core services, so I tried to remove the Foreign Key Index convention.
|public static IServiceCollection InitDatabaseContext(this IServiceCollection services, string connectionString)|
|public class CustomSetBuilder : SqlServerConventionSetBuilder|
|public CustomSetBuilder(RelationalConventionSetBuilderDependencies dependencies, ISqlGenerationHelper sqlGenerationHelper) : base(dependencies, sqlGenerationHelper)|
|public override ConventionSet AddConventions(ConventionSet conventionSet)|
|var et = conventionSet.ForeignKeyAddedConventions.FirstOrDefault(f => f is ForeignKeyIndexConvention);|
|if (et != null)|
I did generate a migration for my project with default conventions and then did generate migration after removing this convention. I am 100% convinced that this convention affected only default index creation for all foreign keys.
Note: Please test thoroughly before you add this to your project.