Entity framework EF 6未检测到自动迁移列名大写重命名
我们使用EF6代码优先的方法,并且启用了自动迁移(我们处于项目的开始阶段) DB列名是这样显式映射的(使用“HasColumnName”),因为我们希望完全控制列名:Entity framework EF 6未检测到自动迁移列名大写重命名,entity-framework,entity-framework-migrations,automatic-migration,Entity Framework,Entity Framework Migrations,Automatic Migration,我们使用EF6代码优先的方法,并且启用了自动迁移(我们处于项目的开始阶段) DB列名是这样显式映射的(使用“HasColumnName”),因为我们希望完全控制列名: modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("Gender"); modelBuilder.Entity().Property(u=>u.Gender).IsRequired().HasColumn
modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("Gender");
modelBuilder.Entity().Property(u=>u.Gender).IsRequired().HasColumnName(“Gender”);
我今天刚刚注意到,当我将映射列的名称更改为以小写的ex开头时:
modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("gender");
modelBuilder.Entity().Property(u=>u.Gender).IsRequired().HasColumnName(“Gender”);
。。。自动迁移不会将此检测为对DB的更改,也不会执行任何操作,即DB列名保持不变(“性别”大写g)
只是在我将列名更改为另一个单词ex之后:
modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("genders");
modelBuilder.Entity().Property(u=>u.Gender).IsRequired().HasColumnName(“genders”);
…这导致自动迁移实际上更改了数据库中的列名,这表明对列名的检查是以不区分大小写的方式进行的
有人知道这是设计的,还是EF中的一个bug?
此外,是否有办法强制自动迁移执行区分大小写的列名检查
提前感谢区分大小写对DB没有多大影响,所以我相信这是有意的 如果您不喜欢小写的列名,只需解决以下问题:
或者,您可以手动编辑生成的迁移代码我认为这是故意的,因为数据库不关心区分大小写的列名。我已经按照您的建议做了一个变通方法,但我真的不喜欢手动执行此操作。我希望有一种方法可以强制迁移脚本直接执行案例更改。我认为没有任何其他方法值得这样做。尽管此解决方案涉及一些手动步骤,但速度很快,只需一次。我最好把时间花在更重要的任务上。但和往常一样,这只是我的观点;)
modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("gender");
modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("genders");