Подтвердить что ты не робот

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

команда: 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
4b9b3361

Ответ 2

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

ПЛОХО:

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

OK:

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Шаги для исправления, если это помогает:

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

Тестирование исправления:

  • Обновление базы данных, целевая задача перед переносом уровня 1.
  • Обновление базы данных до последней миграции и убедитесь, что она не не в состоянии ".

Ответ 5

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

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

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

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

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

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