aristov
aristov

Reputation: 33

EF 6 automatic migration column name uppercase rename not detected

We are using EF6 code first approach and we have automatic migrations enabled (we are at the beginning of the project).

Database.SetInitializer(new MigrateDatabaseToLatestVersion<OurDbContext, Configuration>());

And in the Configuration class we have the following enabled in order for the DB to be updated automatically during each application start:

public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }

The DB column names are explicitly mapped like this (with "HasColumnName") because we want to have full control over the column names:

modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("Gender");

I've just noticed today that when I changed the name of the mapped column to begin with a lowercase ex:

modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("gender");

... the automatic migration does not detect this as a change to the DB and does nothing i.e. the DB column name stays the same ("Gender" with an uppercase g).

It was only after I changed the column name to another word ex:

modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("genders");

...that caused the automatic migrations to actually change the column name in the DB, which indicates that somehow the check for column name is done in a case insensitive way.

Does anyone know if this is by design, or is this a bug in EF? Additionally is there a way to force the automatic migrations to perform case sensitive column name checks?

Thanks in advance

Upvotes: 1

Views: 2803

Answers (1)

SoftwareFactor
SoftwareFactor

Reputation: 8588

Case sensitivity does not make much difference to DB, so I believe this is intentional.

If you don't like lowercase column name, just work around this:

  1. Rename the column from "gender" to something like "genders". Add migration
  2. Rename column back to "Gender". Add migration

Alternatively, you can manually edit generated migration code

Upvotes: 0

Related Questions