Ошибка "Запрошенное значение" UpdateDatabaseOperation "не найдено" при попытке создать идемпотентный скрипт Code First Migration "
Я использую dotConnect 7.3.115.0 с EntityFramework 6.0.2.
Когда я пытаюсь сгенерировать сценарий для своей миграции, я получаю сообщение об ошибке "Запрошенное значение" UpdateDatabaseOperation "не найдено".
Вот детали и трассировка стека:
PM> Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration: Test -Verbose
Использование запуска проекта "Domain.DataAccess".
Использование проекта NuGet 'Domain.DataAccess'.
Целевая база данных: "TestDatabase" (источник данных: localhost, поставщик: Devart.Data.PostgreSql, источник: конфигурация).
Применение явных миграций: [201403241857577_InitialCreate, 201403241941149_Test].
Применение явной миграции: 201403241857577_InitialCreate.
Применение явной миграции: 201403241941149_Test.
System.ArgumentException: Requested value 'UpdateDatabaseOperation' was not found.
at System.Enum.EnumResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument)
at System.Enum.TryParseEnum(Type enumType, String value, Boolean ignoreCase, EnumResult& parseResult)
at System.Enum.Parse(Type enumType, String value, Boolean ignoreCase)
at Devart.Common.Entity.Migrations.a.b(MigrationOperation A_0)
at Devart.Common.Entity.Migrations.f.a(MigrationOperation A_0)
at Devart.Common.Entity.Migrations.f.a(IEnumerable`1 A_0)
at Devart.Common.Entity.Migrations.c.a(IEnumerable`1 A_0, String A_1)
at Devart.Data.PostgreSql.Entity.Migrations.PgSqlEntityMigrationSqlGenerator.Generate(IEnumerable`1 migrationOperations, String providerManifestToken)
at System.Data.Entity.Migrations.DbMigrator.GenerateStatements(IList`1 operations, String migrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.GenerateStatements(IList`1 operations, String migrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorScriptingDecorator.ScriptUpdate(String sourceMigration, String targetMigration)
at System.Data.Entity.Migrations.Design.ToolingFacade.ScriptUpdateRunner.Run()
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
at System.Data.Entity.Migrations.Design.ToolingFacade.ScriptUpdate(String sourceMigration, String targetMigration, Boolean force)
at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Requested value 'UpdateDatabaseOperation' was not found.
Обновить
Кажется, что проблема связана с генерацией идемпотентных сценариев с использованием -SourceMigration: $InitialDatabase
По Microsoft:
Генерация идемпотентных сценариев (EF6 и далее)
Начиная с EF6, если вы укажете –SourceMigration $InitialDatabase, то сгенерированный скрипт будет "идемпотентным". Сценарии Idempotent могут обновить базу данных в любой версии до последней версии (или до указанной версии, если вы используете –TargetMigration). Сгенерированный скрипт содержит логику для проверки таблицы __MigrationsHistory и применения только тех изменений, которые ранее не применялись.
Я сталкиваюсь с этой ошибкой только при использовании dotConnect, указывающего на базу данных PostgreSQL. Все работает, как и ожидалось при использовании экземпляра SQLServer.
1 ответ
Спасибо за отчет по этому вопросу. Мы воспроизвели эту проблему.
ОБНОВИТЬ
Мы изучили проблему более подробно, и она не связана с dotConnect для PostgreSQL. Проблема связана с инструментом EF и используемой в нем командой:
Update-Database -Script -SourceMigration $InitialDatabase -TargetMigration: s -Verbose
Необходимо использовать параметр -Script или параметр -Verbose, но не оба одновременно. Пожалуйста, попробуйте использовать, например:
Update-Database -Script
Чтобы получить подробную информацию для каждой команды, пожалуйста, используйте:
get-help Update-Database -detailed