Я добавил EF 5 к моему проекту через Nuget и включил миграцию с помощью команды «Enable-Migrations». Затем я назвал «Add-Migration» для генерации базового кода для генерации схемы.Миграции интерфейсного модуля Entity Framework - застряли в начальной миграции
Затем я добавил свойство одному из моих объектов домена (строковое свойство, называемое «TestProperty») и добавил сопоставление в файл EntityTypeConfiguration (мы игнорируем соглашения на данный момент).
Вызов "Add-Migration" снова выдает ошибку:
Unable to generate an explicit migration because the following explicit migrations are pending: [201303262144218_Initial]. Apply the pending explicit migrations before attempting to generate a new explicit migration.
Но вызов "Update-Database" производит исключение SQL, поскольку таблицы уже существуют:
There is already an object named 'Customer' in the database
В моем конструкторе для мой DbContext Я пробовал различные стратегии обновления, например:
Database.SetInitializer<UnitOfWork>(new DropCreateDatabaseAlways<UnitOfWork>());
Am I missi Что-то очевидное? Я попробовал решение здесь, но это не сработало: Automatic Migrations for ASP.NET
Благодаря
EDIT: Обновление Ключ к обходя первый шаг заключается в создании начальной миграции, а затем удалить сгенерированный код от Up и Down (http://thedatafarm.com/blog/data-access/using-ef-migrations-with-an-existing-database/).
Затем я могу обновить модель и карту EF, а затем запустить Add-Migration. Это создает миграцию с правильным кодом Up и Down.
Проблема заключается в попытке применить обновление. Update-Database создает ошибку «Невозможно обновить базу данных, чтобы она соответствовала текущей модели, потому что есть ожидающие изменения и автоматическая миграция отключена ... автоматическая миграция. Установите DbMigrationsConfiguration.AutomaticMigrationsEnabled в true, чтобы включить автоматическую миграцию. Вы можете использовать Add- Команда «Миграция» для записи изменений ожидающей модели на перенос на основе кода ». Итак, я снова попробую Добавить-Миграцию, и он производит другую миграцию с тем же кодом, что и последний.
Я запустил Update-Database и снова получаю ту же ошибку. Я пытаюсь «Update-Database -TargetMigration 201304080859556_MyMigration -Force», но это создает «Указанная целевая миграция» 201304080859556_MyMigration «не существует. Убедитесь, что миграция цели относится к существующему идентификатору миграции» - он делает!
Очень расстраивает!
Есть ли существующий файл в каталоге Migrations под названием 201303262144218_Initial.cs? – MattSull
Да. Я немного смущен - начальная миграция должна быть пустой или предполагается создать базу данных в ее исходном состоянии? Кроме того, у меня нет таблицы __MigrationHistory (либо в моей базе данных, либо в Master). – SturmUndDrang
Инициализация - это просто имя, данное этой миграции. Иногда люди называют свою первую миграцию начальной. Если у вас есть существующий db и запускается команда add-migration/update-database без внесения каких-либо изменений в классы модели, файл миграции будет пустым. Удалите файл 201303262144218_Initial.cs, а затем снова запустите две команды («add-migration newestMigration», затем «update-database». – MattSull