问题描述
我刚刚完成模型的修改,在包管理器控制台和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表时发生了错误.但由于我要更新架构,它不应该期待记录吗?
EDITAfter 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 AGAINI got tired of finding what is causing the problem so I did a quick workaround
- 创建数据的备份脚本
- 删除当前数据库
- 在控制台中运行添加-迁移"和更新数据库"
- 相应地在备份脚本中重命名表名
- 运行脚本
现在一切正常.只是要弄清楚为什么加载如此缓慢太慢了
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-“更新数据库";导致序列包含多个元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!