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

команда: добавить-миграция бла-бла -вербоз
ошибка: последовательность не содержит элементов

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

9 ответов

Решение

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

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

ПЛОХОЙ:

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

ХОРОШО:

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

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

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

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

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

В моем случае это произошло из-за ошибки с моей стороны. В моей конфигурации я случайно включил свойство навигации вместо свойства, представляющего столбец, например:

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

что должно было быть

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

Это легко упустить из виду, особенно в более сложных сценариях.

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

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

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

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

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

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

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

Шаги, чтобы исправить, если это помогает:

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

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

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

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

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

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

Сменив мой проект по умолчанию обратно на мой веб-проект, щелкнув правой кнопкой мыши по проекту и выбрав Set As Startup Project, я решил эту проблему.

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

Другие вопросы по тегам