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方法中的已接受答案会导致对数据库进行不必要的工作.相反,我建议正确的做法是删除这些索引Up和Down方法的内容,因为这些索引已经存在并且不需要删除.
我有完全相同的问题.我通过重新创建索引来修复它.
我通过在迁移到Up方法时从Down方法粘贴DropIndexes来完成此操作.因此,首先有效地删除索引,然后重新创建它们.不知道为什么这是必要的,但它解决了问题.