Ошибка миграции Entity Framework — последовательность не содержит элементов

команда: add-migration blahblah -verbose
ошибка: последовательность не содержит элементов

Я сделал несколько вещей, прежде чем получить эту ошибку. Я внес изменения в свою модель code-first, но еще не запускал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

person Benjamin    schedule 19.09.2012    source источник
comment
Я нашел способ вернуться назад. С этого момента я буду использовать какой-то контроль версий. До сих пор не знаю, что означает эта ошибка.   -  person Benjamin    schedule 20.09.2012


Ответы (8)


Похоже на ошибку. Не могли бы вы подать его по адресу http://entityframework.codeplex.com/workitem/list/advanced с деталями, позволяющими воспроизвести проблему?

person Pawel    schedule 20.09.2012

Эта проблема возникает у меня при попытке определить тип и размер столбца с помощью DataAnnotations.

ПЛОХОЙ:

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

OK:

[MaxLength(254)]
[Column(TypeName="VARCHAR")]
public string ColumnName { get; set; }
person Fábio Correia    schedule 14.03.2014
comment
Этот! Это решило это для меня. Похоже на ошибку (?) в том, как EF обрабатывает аннотации данных? Спасибо за это, в любом случае! - person Adam Szabo; 01.06.2014
comment
Да, я думал, что неправильно указал путь к файлу конфигурации. 1up! - person Eric Bishard; 24.02.2015
comment
Это происходит и с [Column(TypeName = "decimal(8,2)")]. - person M. Mimpen; 10.04.2015
comment
Это происходит и с [Column(TypeName = text)]. Чуть не свел меня с ума, отследить это. - person Bob Black; 07.11.2015
comment
#М. Mimpen, что вы сделали с десятичной дробью, чтобы решить вашу проблему? - person Salik; 14.01.2016
comment
Это также происходит с [Column (TypeName = boolean)] ... измените это на бит - person danpop; 25.02.2016
comment
По состоянию на 2 декабря 2016 г., если вы используете EntityFramework Reverse POCO Generator , вы получите классы с оскорбительным синтаксисом. ПРИМЕЧАНИЕ: Это не удар по расширению, это ОТЛИЧНО! - person Mike Devenney; 02.12.2016
comment
получил ту же ошибку в моем свободном файле конфигурации. HasColumnType (varchar (50)). IsOptional () вызвал исключение, но .HasColumnType (varchar). - person JCherryhomes; 17.12.2016
comment
@Salik Посмотрите здесь. Меня устраивает :) - person Nurul; 13.03.2017
comment
в моем случае HasColumnType (varchar (50)) приводит к тому, что последовательность не содержит элементов - person nikolai.serdiuk; 25.05.2020

У меня возникла проблема с изменением имени вместе с изменением отношений, связанных с сущностью.

Итак, мое решение в моем случае было:

  • Смена названия на старое
  • Добавление миграции (тогда смог это сделать)
  • Обновление базы данных
  • Изменение имени объекта и создание новой миграции

Однако потенциально может быть много других причин этой проблемы, например. удаление миграции после ее применения. К сожалению, ни в одном из них эта ошибка не имеет смысла.

person Krzysiek    schedule 21.10.2016

Я также столкнулся с этим, потому что пытался выполнить миграцию с классом, в котором отсутствует модификатор общего доступа.

Как только я добавил это - ошибка была устранена.

person Michael    schedule 04.04.2019

Я столкнулся с той же проблемой, я нашел эту проблему: Миграции: "Последовательность не содержит элементов" в модели отличаются после переименования Свойство PK при самоссылающемся отношении без свойства FK (независимая ассоциация), что является ситуацией, в которой я застрял. это ошибка, но есть обходной путь, предложенный пользователем, который я считаю хорошим решением:

«Моя таблица ссылалась на себя, отбрасывая столбец внешнего ключа, а затем добавляя миграцию, устранила проблему и позволила переименовать свойство

Действия по исправлению, если это поможет:

  1. Удалить (комментировать) внешние ключи, ссылающиеся на самих себя, и выполнить миграцию, Update-Database
  2. Переименовать столбец проблемы, создать другую миграцию, обновить базу данных
  3. Раскомментируйте внешние ключи, ссылающиеся на себя, и задайте миграцию, Update-Database
  4. Удалите код (но оставьте миграцию), созданный на шагах 1 и 3.

Проверка исправления:

  1. Обновить базу данных, цель до шага № 1 миграции
  2. Обновите базу данных до самой последней миграции и убедитесь, что она не завершается ошибкой».
person Ashkan    schedule 14.07.2013
comment
Я пробовал это, но миграция, которую я создал для шага 1, дала ту же ошибку stackoverflow.com/q/29745049/150342 - person Colin; 20.04.2015

Это случилось со мной, когда я делал это для небольшого веб-проекта.

Веб-файл .csproj не удалось загрузить один раз, и Visual Studio решила изменить проект по умолчанию на случайный, который действительно загружался.

Поскольку app.config в новом проекте по умолчанию не содержал никаких строк подключения... EF не смог найти место для обновления.

Изменение моего проекта по умолчанию обратно на мой веб-проект, щелкнув проект правой кнопкой мыши и выбрав «Установить как стартовый проект», решило это для меня.

Но я предполагаю, что проблема здесь заключалась в том, что EF искал первую строку подключения в конфигурации по умолчанию, а количество доступных строк было равно 0.

person Izzy    schedule 22.03.2017

Я получил эту ошибку при использовании 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)");
person Ogglas    schedule 14.03.2018

Я столкнулся с той же проблемой, когда существует наследование между двумя объектами, и я хотел создать индекс для свойства одного из них. В версии 6.3 есть сообщенная ошибка по этой проблеме.

Когда я удалил наследование или индекс, миграция была успешно создана. В качестве обходного пути вы можете создать индекс вручную.

person Pietro    schedule 21.10.2019