EF-“更新数据库";导致序列包含多个元素 [英] EF - "Update-Database" causing Sequence contains more than one element

查看:92
本文介绍了EF-“更新数据库";导致序列包含多个元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚完成模型的修改,在包管理器控制台和BOOM中运行了"Update-Database"!我收到序列包含多个元素"错误. 通过控制台扫描后,它确实说了No pending explicit migrations.,这显然是错误的,因为我重命名了某些模型.我还发现了一个SingleOrDefault调用,但我不知道它来自哪里.我注释掉了我的种子方法,以免造成问题

I have just finished modifying my models, ran "Update-Database" in the package manager console and BOOM! I received a "Sequence contains more than one element" error. Upon scanning through the console, it did say No pending explicit migrations. which is obviously wrong since I renamed some models. I also found a SingleOrDefault call I don't know where it came from. I commented out my seed method so that's not causing it

    No pending explicit migrations.
System.InvalidOperationException: Sequence contains more than one element
   at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
   at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.<>c__DisplayClass280.<IndexesEqual>b__27d(String c)
   at System.Linq.Enumerable.<>c__DisplayClass7_0`3.<CombineSelectors>b__0(TSource x)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.SequenceEqual[TSource](IEnumerable`1 first, IEnumerable`1 second, IEqualityComparer`1 comparer)
   at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.IndexesEqual(ConsolidatedIndex consolidatedIndex1, ConsolidatedIndex consolidatedIndex2, ICollection`1 renamedColumns)
   at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.<>c__DisplayClass271.<FindAddedIndexes>b__26d(ConsolidatedIndex i1, ConsolidatedIndex i2)
   at System.Data.Entity.Utilities.DynamicEqualityComparer`1.Equals(T x, T y)
   at System.Linq.Set`1.Find(TElement value, Boolean add)
   at System.Linq.Enumerable.<ExceptIterator>d__72`1.MoveNext()
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(ModelMetadata source, ModelMetadata target, Lazy`1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator, String sourceModelVersion, String targetModelVersion)
   at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(XDocument sourceModel, XDocument targetModel, Lazy`1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator, String sourceModelVersion, String targetModelVersion)
   at System.Data.Entity.Migrations.DbMigrator.IsModelOutOfDate(XDocument model, DbMigration lastMigration)
   at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
   at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Sequence contains more than one element

编辑 经过一些挖掘后,发现在EF查询_MigrationHistory表时发生了错误.但由于我要更新架构,它不应该期待记录吗?

EDIT After some digging, found out that the error occurs when EF queries the _MigrationHistory table. but shouldn't it expect records since I want to update the schema?

此外,将模型移至另一个项目是否有效果?

Also, does moving the models to another project have an effect?

再次编辑 我已经厌倦了寻找导致问题的原因,所以做了一个快速的解决方法

EDIT AGAIN I got tired of finding what is causing the problem so I did a quick workaround

  1. 创建数据的备份脚本
  2. 删除当前数据库
  3. 在控制台中运行添加-迁移"和更新数据库"
  4. 相应地在备份脚本中重命名表名
  5. 运行脚本

现在一切正常.只是要弄清楚为什么加载如此缓慢太慢了

All is working fine now. Just have to figure out why loading is sooooooooooooo annoyingly slow

推荐答案

当我在数据库中有重复的条目(对应于同一实体)时,通常会发生这种情况.

This usually happens to me when I have duplicate entries in my database, corresponding to the same entity.

删除重复项即可使其正常工作.如果您有数据脚本,请检查并确认您尝试在迁移脚本中更新的实体中是否存在重复的记录.

Deleting the duplicates makes it work. If you have the data script with you please check and confirm if there were duplicate records in the entities you tried to update in your migration script.

这篇关于EF-“更新数据库";导致序列包含多个元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆