Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework EF 6未检测到自动迁移列名大写重命名_Entity Framework_Entity Framework Migrations_Automatic Migration - Fatal编程技术网

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

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

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

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

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没有多大影响,所以我相信这是有意的

如果您不喜欢小写的列名,只需解决以下问题:

  • 将列从“gender”重命名为类似“genders”的名称。添加迁移
  • 将列重新命名为“性别”。添加迁移

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

    我认为这是故意的,因为数据库不关心区分大小写的列名。我已经按照您的建议做了一个变通方法,但我真的不喜欢手动执行此操作。我希望有一种方法可以强制迁移脚本直接执行案例更改。我认为没有任何其他方法值得这样做。尽管此解决方案涉及一些手动步骤,但速度很快,只需一次。我最好把时间花在更重要的任务上。但和往常一样,这只是我的观点;)
    modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("gender");
    
    modelBuilder.Entity<User>().Property(u => u.Gender).IsRequired().HasColumnName("genders");