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

C# 将实体框架升级到6.1-索引已存在错误,c#,entity-framework,C#,Entity Framework,我刚刚用代码优先模型将一个项目从EntityFramework6.0.2升级到了6.1.0 升级后,context.Database.CompatibleWithModel(true)返回false,因此EF认为数据库不再与模型兼容。我没有改变任何事情,只是升级了EF 我运行了addmigration,看看会发生什么,EF创建了一个大迁移,似乎在每个表的每个外键属性上创建了一个索引: public override void Up() { CreateIndex(

我刚刚用代码优先模型将一个项目从EntityFramework6.0.2升级到了6.1.0

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

我运行了
addmigration
,看看会发生什么,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...
我想这与EF 6.1中的新索引功能有关?有点奇怪,但还好

当我
updatedatabase
应用新的迁移时,会出现索引已经存在的错误。查看数据库和以前的迁移,几乎所有索引都确实已经存在


我做错了什么?有升级EF的程序吗?

我也有同样的问题。我通过重新创建索引修复了它

我通过在迁移到Up方法时将DropIndexes从Down方法复制粘贴到Up方法中来实现这一点。 因此,首先有效地删除索引,然后重新创建它们。
不知道为什么有必要这样做,但它解决了问题。

关于:正在创建外键,我在以下链接中找到了以下信息:

声明如下:

ForeignKeyIndexConvention Code First约定会导致为模型中任何外键的列创建索引,除非这些列已经使用IndexAttribute指定了索引。如果不需要FKs的索引,可以删除此约定:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<ForeignKeyIndexConvention>();
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}

如其他答案中所述,这是由于实体框架错误造成的。将
DropIndex
代码复制到
Up
方法中的公认答案会对数据库造成不必要的工作。相反,我建议正确的做法是删除
Up
Down
方法的内容,因为这些索引已经存在,不需要删除。

您自己创建过任何索引吗?不,所有现有索引都是通过EF迁移创建的。这里的情况完全相同。一只虫子-(那么这听起来像是EF 6.1中的一个bug。你报告了吗?谢谢!这解决了我的问题。我们一直在一个系统上迭代并创建我们自己的索引,因为EF的功能有限。我们使用nuget并更新了所有包。一旦我们这样做了,由于新EF,我们的迁移计划就失败了。上面的这个选项带来了一切。)回到正常状态!:)+1:这将创建一个空的虚拟任务,该任务将只在EF6.1看到时将模型架构的哈希写入迁移历史。