我们正在使用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的错误? 另外有一种方法可以强制自动迁移执行区分大小写的列名检查吗?
提前致谢
答案 0 :(得分:0)
区分大小写对DB没有太大影响,所以我认为这是故意的。
如果您不喜欢小写列名,请解决此问题:
或者,您可以手动编辑生成的迁移代码