Стратегия получения SQL для автоматической миграции

Мы используем EF 5RC, код сначала с миграциями. Я чувствую, что на этот вопрос должно быть легко ответить (надеюсь). Есть ли хороший способ выяснить, что пытается сделать автоматическая миграция.

Я добавил миграцию с помощью команды Add-Migration PS. Я вызвал Update-Database, и с этой миграцией все в порядке. Теперь я просто запускаю Update-Database, как обычно, но со следующей ошибкой:

PM> update-database -Verbose
Using StartUp project 'Web'.
Using NuGet project 'DataAccess'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'UserGroup' (DataSource: (localdb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration).
No pending code-based migrations.
Applying automatic migration: 201206301526422_AutomaticMigration.
Automatic migration was not applied because it would result in data loss.

Обратите внимание, я добавляю параметр -Verbose и снова пробовал использовать -Script. Но я понятия не имею, на что мы мигрируем; и какой SQL - или что он думает, приведет к потере данных.

Я не хочу просто включить здесь «разрешить потерю данных», но пытаюсь понять, как устранять неполадки с этими миграциями.

Заранее спасибо!


person cbkadel    schedule 30.06.2012    source источник


Ответы (2)


Просто беги:

PM> Update-Database -Script -Force

Это сгенерирует SQL и отобразит его в окне, не запуская его.

person Diego Mijelshon    schedule 30.06.2012
comment
Если я включу разрешение на потерю данных, сможет ли он стереть все мои строки? Я добавил атрибут MaxLength в столбец, я знаю, что ни одна из строк в БД на самом деле не превышает эту длину, если я не возражаю против усечения. Так вот что означает потеря данных, или она буквально удалит все строки из БД? - person Shimmy Weitzhandler; 20.12.2012
comment
@Shimmy, это не сотрет твои строки. - person Diego Mijelshon; 20.12.2012
comment
Но он может удалять или сокращать столбцы - person Eric J.; 21.06.2014

Я получил эту ошибку в Azure после публикации, но вы не можете использовать -Force, поэтому глобальное решение (и нет необходимости в -Force на локальном уровне)

public Configuration()
{
    AutomaticMigrationsEnabled = true;
    AutomaticMigrationDataLossAllowed = true; // <-- THIS LINE
}
person Zakos    schedule 03.03.2013
comment
просто добавьте это в конструктор класса конфигурации, который наследуется от DbMigrationsConfiguration‹YourDataContext› msdn.microsoft.com/en-us/library/hh829093(v=vs.103).aspx - person Anthony Johnston; 04.03.2013
comment
Спасибо, я застрял с проблемой публикации в Azure. - person Michael Harper; 25.01.2014
comment
Довольно опасно допускать потерю данных при миграции в производственной среде. - person Eric J.; 21.06.2014