【发布时间】: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