2012-02-14 4 views
2

Я обновил проект до Entity Framework 4.3 и включил миграции в проекте.Ошибка при запуске Update-Database с EF 4.3

Однако, я получаю эту ошибку при выполнении команды Update-Database:

Не может эшафот следующей миграции, потому что целевая база данных были создан с версией Code First раньше, чем EF 4.3 и не содержит историю миграций Таблица. Чтобы начать использовать миграции для этой базы данных, убедитесь, что текущая модель совместима с целевой базой данных и выполняет процесс обновления миграций. (В Visual Studio вы можете использовать команду «Обновить базу данных» из консоли диспетчера пакетов, чтобы выполнить процесс обновления миграций).

В принципе, мне говорят, что я запускаю ту же команду (Update-Database), которая дает мне ошибку.

Любые идеи?


Не совсем «весело» способ сделать это, но я пусть приложение создать новую базу данных, которая создает системную таблицу под названием «__MigrationHistory». Затем я запустил следующий скрипт, чтобы создать эту таблицу в моей старой базе данных. Я также создал сценарий для копирования одной строки, существующей в новой базе данных, в старую базу данных.

Если кто-то из Microsoft или сообщества знает более эффективный способ сделать это, напишите здесь!


SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[__MigrationHistory](
    [MigrationId] [nvarchar](255) NOT NULL, 
    [CreatedOn] [datetime] NOT NULL, 
    [Model] [varbinary](max) NOT NULL, 
    [ProductVersion] [nvarchar](32) NOT NULL, 
CONSTRAINT [PK___MigrationHistory] PRIMARY KEY CLUSTERED 
(
    [MigrationId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,   ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 

ответ

3

Когда вы запускали Enable-Migrations, сценарии могут не создали начальную миграцию, особенно если ваша модель была несовпадающими к базе данных, или если ваш DbContext класс определен в другом проекте.

Я не уверен, что «правильный путь» для добавления миграции в существующую базу данных до 4.3, но самым простым способом является сброс базы данных. Оставьте таблицы в нем ...

Убедитесь, что файл конфигурации в папке Migrations имеет правильный тип контекста, а затем Add-Migration Initial. Будет создан большой класс, представляющий вашу текущую модель.

Теперь Update-Database будет работать без жалобы.


Если у вас есть данные, которые вы заботитесь о в БД, вы можете обмануть и добавить __MigrationHistory таблицу, что процесс миграции создает для предыдущей резервной копии вашей базы данных. Удалите EdmMetadata, и миграция не должна быть более мудрой.

Надеемся, что кто-то, кто действительно знает, как перенаправляемые миграции были добавлены в существующую базу данных EF Code First, будет иметь более плавные шаги по обновлению?

+0

Спасибо! Я думаю, что я собираюсь пойти по пути создания таблицы _MigrationHistory, поскольку у меня есть много данных в базе данных, которые мне нужно использовать. –

+2

У II была аналогичная проблема, мне также нужно было хранить данные. Но при попытке добавить столбцы путем редактирования модели и «Добавить-миграции новых столбцов», но созданная миграция хотела сбросить все и начать все заново. Решением к этому было добавить начальную миграцию, прежде чем что-либо редактировать, что привело к классу переноса с пустым методом «вверх-вниз». THEN я редактировал мою модель и запускал еще одну Add-Migration, которая создала новый класс миграции именно с теми изменениями, которые мне нужны. Не отбрасывая ничего. – Moulde

0

Я просто побежал в это на базе данных я «мысль» была уже 4,3, но не было ....

Я нашел ответ с этим blog post.

Вот основные шаги.

  1. Не вводите изменения в модель, на самом деле, не надо!
  2. Добавить начальную миграцию.
  3. Обновление базы данных (все они).

Теперь вы можете заниматься своим обычным делом.

Вот вшивый песчаный:

Не изменить модель.

Если у вас есть, вам нужно вернуть их обратно. Ugggg. Я просто прокомментировал свои изменения. К счастью, для меня изменения были довольно маленькими. Конечно, вы все равно делаете вещи в небольших кусках. :-)

Добавить первоначальную миграцию.

Add-Migration "InitialModel" -IgnoreChanges 

В до скрипта добавьте следующие строки:

public override void Up()  
{   
    Sql("DROP TABLE EdmMetadata");  
} 

Добавление таблицы падение не является необходимым, но 4,3 и не использовать EdmMetadata так, могли бы также.

Обновление базы данных (все)

Update-Database 

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

Теперь продолжайте работать как обычно. Внесите свои изменения и следуйте нормам Add-Migration & Update-Database шаги для миграции.

0

Спасибо за вопрос и ответы. Я сделал следующее (состав советов выше).

Как перейти из предварительного EF 4.3 с данными и первой модели Код:

  1. закомментируйте все изменения, сделанные по сравнению с текущими данными (мне нужно, чтобы удалить таблицу добавления).
  2. базы данных резервного копирования
  3. Удалить таблицу EdmMetadata
  4. Добавить таблицу __MigrationHistory со сценарием выше
  5. Run Add-Migration "InitialModel"
  6. Отбросьте все таблицы, кроме __MigrationHistory таблицы
  7. Run Update-database
  8. Генерировать скрипт для __MigrationHistory с недавно добавленные данные. Добавить там Drop table EdmMetadata.
  9. Восстановите базу данных и запустите этот скрипт.
  10. Верните изменения в код.
  11. Run Add-Migration YOURNAMEFORNEWCHANGES
  12. Run Update-Database

И я старую базу данных с данными обновляется до EF 6. Надежда, что помогает!

 Смежные вопросы

  • Нет связанных вопросов^_^