32

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

在收到此错误之前,我做了一些事情。我对代码优先模型进行了更改,但尚未运行add-migration。然后我添加了一个 EDMX 模型来直观地玩弄一个想法。我意识到 EDMX 模型弄乱了我的代码,所以我删除了它。我试图运行add-migration并得到“序列不包含任何元素”。我升级到 EF 5 并卸载了旧的迁移包,但我的配置除外。然后我又试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
4

9 回答 9

63

当尝试使用DataAnnotations.

坏的:

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

好的:

[MaxLength(254)]
[Column(TypeName="VARCHAR")]
public string ColumnName { get; set; }
于 2014-03-14T16:33:34.823 回答
6

对我来说导致问题的原因是更改名称以及更改与实体关联的关系。

所以我的解决方案是:

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

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

于 2016-10-21T13:58:44.063 回答
2

看起来像一个错误。您介意在http://entityframework.codeplex.com/workitem/list/advanced上提交它,并附上允许重现问题的详细信息吗?

于 2012-09-20T05:14:58.610 回答
2

像这样使用 Fluent API 时出现此错误OnModelCreating

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)");
于 2018-03-14T11:42:47.867 回答
2

我也遇到了这个问题,因为我试图运行一个缺少公共访问修饰符的类的迁移。

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

于 2019-04-04T16:15:53.460 回答
1

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

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

修复步骤,如果有帮助:

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

测试修复:

  1. 更新数据库,在第 1 步迁移之前定位
  2. 将数据库更新到最近的迁移并确保它不会失败。”
于 2013-07-14T09:17:34.463 回答
1

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

网络的 .csproj 有一次加载失败,Visual Studio 决定将默认项目更改为可以加载的随机项目。

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

通过右键单击项目并选择设置为启动项目,将我的默认项目更改回我的 web 项目,为我解决了这个问题。

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

于 2017-03-22T11:53:58.843 回答
1

当两个实体之间存在继承并且我想在其中一个的属性上创建索引时,我遇到了同样的问题。在版本 6.3 上报告了此问题的错误。

当我删除继承或索引时,迁移已成功创建。作为一种解决方法,您可以手动创建索引。

于 2019-10-21T15:29:28.230 回答
0

就我而言,这是由于我的错误。在我的配置中,我不小心包含了一个导航属性,而不是代表该列的属性,例如:

HasIndex(x => new { x.ID, x.Parent }).IsUnique();

应该是

HasIndex(x => new { x.ID, x.ParentID }).IsUnique();

这很容易被忽视,尤其是在更复杂的场景中。

于 2021-11-15T06:36:17.197 回答