实体框架迁移错误 - 序列不包含任何元素

问题描述 投票:27回答:7

命令:add-migration blahblah -verbose 错误:序列不包含任何元素

在收到此错误之前我做了一些事情。我改变了我的代码优先模型,但还没有运行add-migration。然后我添加了一个EDMX模型来直观地展示一个想法。我意识到EDMX模型弄乱了我的代码所以我删除了它。我试图运行add-migration并得到“序列不包含任何元素”。我升级到EF 5并卸载旧的Migrations包,但我的配置除外。然后我再次尝试add-migration,我仍然得到“序列不包含任何元素”。以下是错误的其余部分。

System.InvalidOperationException: Sequence contains no elements
   at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
   at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.GetQualifiedTableName(XDocument model, String entitySetName)
   at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.<FindRenamedIndependentAssociationColumns>b__ba(<>f__AnonymousType16`2 <>h__TransparentIdentifieraa)
   at System.Linq.Enumerable.<>c__DisplayClass12`3.<CombineSelectors>b__11(TSource x)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.<ConcatIterator>d__71`1.MoveNext()
   at System.Linq.Enumerable.<ConcatIterator>d__71`1.MoveNext()
   at System.Linq.Enumerable.<DistinctIterator>d__81`1.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(XDocument sourceModel, XDocument targetModel, String connectionString)
   at System.Data.Entity.Migrations.DbMigrator.Scaffold(String migrationName, String namespace, Boolean ignoreChanges)
   at System.Data.Entity.Migrations.Design.MigrationScaffolder.Scaffold(String migrationName, Boolean ignoreChanges)
   at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Scaffold(MigrationScaffolder scaffolder)
   at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.RunCore()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
Sequence contains no elements
.net entity-framework ef-code-first ado.net-entity-data-model edmx
7个回答
2
投票

看起来像个bug。您是否介意在http://entityframework.codeplex.com/workitem/list/advanced上提交详细信息以便重现问题?


58
投票

尝试使用DataAnnotations定义列的类型和大小时,会出现此问题。

坏:

[Column(TypeName="VARCHAR(254)")]
public string ColumnName { get; set; }

好:

[MaxLength(254)]
[Column(TypeName="VARCHAR")]
public string ColumnName { get; set; }

6
投票

造成这个问题的原因是改变名称以及改变与实体相关的关系。

所以我的决议是:

  • 将名称更改回旧名称
  • 添加迁移(然后能够做到)
  • 更新数据库
  • 更改实体的名称并生成新的迁移

但是,这个问题可能还有许多其他原因 - 例如应用后删除迁移。不幸的是,这些错误都没有意义。


1
投票

我遇到了同样的问题,我发现了这个问题:Migrations: "Sequence contains no elements" in model differ after renaming PK property when self-referencing relationship with no FK property (independent association)这是我坚持的情况。这是一个错误,但有一个用户建议的解决方法,我认为这是一个很好的解决方案:

“我的表是自引用,删除外键列,然后添加迁移修复了该问题并允许重命名该属性

修复的步骤,如果有帮助:

  1. 删除(注释)自引用外键并搭建迁移,Update-Database
  2. 重命名问题列,Scaffold另一个迁移,Update-Database
  3. 取消注释自引用外键并构建迁移,即Update-Database
  4. 删除步骤1和3生成的代码(但保留迁移)

测试修复:

  1. 在步骤#1迁移之前更新数据库,目标
  2. 更新 - 数据库到最近的迁移,并确保它不会失败。“

1
投票

当我为一个小型网络项目做这件事时,这发生在我身上。

网络的.csproj无法加载一次,visual studio决定将默认项目更改为随机加载的项目。

因为新默认项目中的app.config不包含任何connectionStrings ... EF无法在任何地方找到更新。

通过右键单击项目并选择Set As Startup Project,将我的默认项目更改回我的Web项目,为我解决了这个问题。

但我想这里的问题是EF在默认配置中寻找第一个连接字符串,可用的字符串数为0。


1
投票

OnModelCreating中使用Fluent API时出现此错误,如下所示:

modelBuilder.Entity<ApplicationUser>()
    .Property(b => b.Id)
    .HasColumnType("nvarchar(128)");

更改为此,然后一切正常:

modelBuilder.Entity<ApplicationUser>()
    .Property(b => b.Id)
    .HasColumnType("nvarchar")
    .HasMaxLength(128);

请注意,使用nvarchar(MAX)和类似不是问题,不会导致此错误。

modelBuilder.Entity<ApplicationUser>()
    .Property(b => b.PasswordHash)
    .HasColumnType("nvarchar(MAX)");

0
投票

我也遇到过这种情况,因为我试图在缺少公共访问修饰符的类的情况下运行迁移。

一旦我添加了这个 - 错误就解决了。

© www.soinside.com 2019 - 2024. All rights reserved.