未检测到EF 6自动迁移列名称大写重命名

时间:2014-05-19 16:11:37

标签: entity-framework ef-migrations automatic-migration

我们正在使用EF6代码第一种方法,并且我们启用了自动迁移(我们正处于项目的开始阶段)。

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

在Configuration类中,我们启用了以下功能,以便在每次应用程序启动期间自动更新数据库:

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

DB列名称是这样显式映射的(使用“HasColumnName”),因为我们希望完全控制列名称:

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

我今天刚刚注意到,当我将映射列的名称更改为以小写字母开头时:

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

...自动迁移不会将此检测为对DB的更改,也不执行任何操作,即DB列名称保持不变(“Gender”为大写g)。

只有在我将列名更改为另一个单词ex:

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

...导致自动迁移实际更改了DB中的列名,这表明以不区分大小写的方式检查列名称。

有人知道这是设计的,还是EF的错误? 另外有一种方法可以强制自动迁移执行区分大小写的列名检查吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

区分大小写对DB没有太大影响,所以我认为这是故意的。

如果您不喜欢小写列名,请解决此问题:

  1. 重命名&#34;性别&#34;类似于&#34;性别&#34;。添加迁移
  2. 将列重命名为&#34; Gender&#34;。添加迁移
  3. 或者,您可以手动编辑生成的迁移代码