【问题标题】:EF 6 automatic migration column name uppercase rename not detected未检测到 EF 6 自动迁移列名大写重命名
【发布时间】:2014-05-20 00:23:10
【问题描述】:

我们使用的是 EF6 代码优先方法,并且我们启用了自动迁移(我们处于项目的开始阶段)。

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

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

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

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

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

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

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

...自动迁移不会检测到这是对数据库的更改,并且什么也不做,即数据库列名称保持不变(“性别”带有大写字母 g)。

只是在我将列名更改为另一个单词后:

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

...导致自动迁移实际上更改了数据库中的列名,这表明以某种方式对列名的检查是以不区分大小写的方式完成的。

有谁知道这是设计使然,还是 EF 中的错误? 另外有没有办法强制自动迁移执行区分大小写的列名检查?

提前致谢

【问题讨论】:

  • 我想这是故意的,因为数据库不关心区分大小写的列名。

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


【解决方案1】:

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

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

  1. 将列从“gender”重命名为“genders”。添加迁移
  2. 将列重命名为“性别”。添加迁移

或者,您可以手动编辑生成的迁移代码

【讨论】:

  • 我已经按照您的建议做了一个解决方法,但我真的不喜欢手动执行此操作。我希望有一种方法可以强制迁移脚本直接执行案例更改。
  • 我认为没有其他方法值得付出努力。尽管此解决方法涉及一些手动步骤,但它很快并且只需要一次。我最好把时间花在更重要的任务上。但与往常一样,这只是我的看法;)
猜你喜欢
  • 2012-09-03
  • 2017-05-16
  • 2017-12-21
  • 2012-07-23
  • 1970-01-01
  • 2013-12-14
  • 2019-08-24
  • 2016-02-02
  • 1970-01-01
相关资源
最近更新 更多