В EF5 у меня есть модель сущности с первым кодом. Но я хочу управлять изменениями базы данных вручную - я не хочу, чтобы EF изменяла мою существующую базу данных и все ее данные. Но когда я делаю параллельные изменения в сопоставлении EF и в базе данных, EF отказывается работать должным образом, говоря мне, что мне нужно использовать первую миграцию кода. Как мне это выключить?
entity-framework
migration
code-first
Стэн Харгроув
источник
источник
Ответы:
установите для Database.SetInitializer значение null.
public class DatabaseContext: DbContext { //the base accepts the name of the connection string provided in the web.config as a parameter public DatabaseContext() : base("DatabaseContext") { //disable initializer Database.SetInitializer<DatabaseContext>(null); }
источник
__MigrationHistory
нет последней миграции, и вы не хотите сделай это все равно. В моем случае я использую миграции в среде разработки, но при развертывании в производственной среде я использую SSDT для обновления базы данных. Поэтому EF будет жаловаться, что модель изменилась, потому__MigrationHistory
что не будет последней миграции, но я могу гарантировать, что база данных обновлена.Database.SetInitializer
из конструктора в конструктор класса. Это гарантирует, что вызов будет сделан только один раз.Итак, наиболее полный ответ, который я нашел, таков:
Migrations
папку внутри вашего проекта.Database.SetInitializer<DatabaseContext>(null);
внутри вашего инициализатора DatabaseContext.__MigrationHistory
внутри вашей базы данных. Для EF6 + таблица находится под,Tables
но для более ранних версий она расположена подSystem Tables
.источник
__MigrationHistory
каждого запуска моего приложения, что увеличивает время запуска моего приложения на несколько миллисекунд. Есть ли способ__MigrationHistory
полностью отключить проверку?Если вы хотите полностью отключить миграции:
https://stackoverflow.com/a/9709407/141172
Тем не менее, я счел, что лучше оставить первую миграцию кода включенной, но использовать
-Script
опцию, чтобы EF создал для меня сценарий изменения БД, который я могу применить к каждой базе данных (разработка, контроль качества, производство) вручную:Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject
Таким образом, EF создаст для меня сценарий изменений, и я по-прежнему полностью контролирую применяемые изменения. Я редактирую сценарии изменений, как и любой другой исходный код.
источник
completely turn off migrations
. Для этого: добавьтеDatabase.SetInitializer<YourContextType>(null)
в автозагрузку своего приложенияЕсли вы уже использовали миграции, изменение только инициализатора не поможет. Вам нужно перейти в Management Studio, открыть таблицы базы данных, перейти в
System Tables
папку и удалить__MigrationHistory
таблицу, которая там находится (для EF6 и выше, она расположена непосредственно подTables
). Это навсегда отключит миграцию.источник
System Tables
.sp_rename
. Еще я отключил инициализатор.Я только что решил эту "проблему"
Конфигурация моей среды следующая
1. Visual Studio 2017 15.8.2 2. ASP NET MVC project 3. .NET Framework 4.6.1 4. Entity Framework 6.2.0
источник
_MigrationHistory
таблицу автоматически?