将实体框架升级到6.1 - 索引已存在错误

Joe*_*ley 17 c# entity-framework

我刚刚使用代码优先模型从Entity Framework 6.0.2升级到6.1.0.

升级后,context.Database.CompatibleWithModel(true)返回false,因此EF认为数据库不再与模型兼容.我没有改变任何其他东西,只是升级了EF.

我跑去Add-Migration看看会发生什么,EF创建了一个大的迁移,似乎在每个表的每个外键属性上创建一个索引:

    public override void Up()
    {
        CreateIndex("dbo.ActivityStreams", "UserId");
        CreateIndex("dbo.Users", "OfficeId");
        CreateIndex("dbo.Offices", "ParentId");
        CreateIndex("dbo.Rosters", "UserId");
        ...and many more similar lines...
Run Code Online (Sandbox Code Playgroud)

我想这与EF 6.1中的新索引功能有关?有点奇怪,但还行.

当我Update-Database应用新迁移时,存在索引已存在的错误.查看数据库和以前的迁移,几乎所有索引确实已经存在.

我在这做错了什么?是否有升级EF的程序?

Jos*_*her 11

如其他答案中所述,这是由于实体框架错误.将DropIndex代码复制到Up方法中的已接受答案会导致对数据库进行不必要的工作.相反,我建议正确的做法是删除这些索引UpDown方法的内容,因为这些索引已经存在并且不需要删除.


Unr*_*ess 8

我有完全相同的问题.我通过重新创建索引来修复它.

我通过在迁移到Up方法时从Down方法粘贴DropIndexes来完成此操作.因此,首先有效地删除索引,然后重新创建它们.不知道为什么这是必要的,但它解决了问题.

  • 那听起来像是EF 6.1中的一个错误.你有报道吗? (2认同)