Как отключить миграцию в Entity Framework 6.0
Я пытаюсь игнорировать "автоматическую" миграцию с использованием Entity Framework 6.0 rc1. Моя проблема в том, что я не хочу эту функцию прямо сейчас, и каждый раз, когда мое приложение запускается, я могу видеть, что все журналы сущностей пытаются создать все таблицы.
Ожидайте спасибо.
Ответы
Ответ 1
Попробуйте следующее:
internal sealed class Configuration : DbMigrationsConfiguration<YourContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
}
UPDATE:
Вы также можете попробовать следующее:
Database.SetInitializer<YourContextType>(new CreateDatabaseIfNotExists());
Ответ 2
Вы можете поместить это внутри раздела entityFramework в app.config:
<contexts>
<context type="YourNamespace.YourDbContext, YourAssemblyName" disableDatabaseInitialization="true"/>
</contexts>
Эта страница msdn рассказывает о разделе конфигурации платформы Entity Framework.
Ответ 3
Через web.config см. - https://msdn.microsoft.com/en-us/data/jj556606.aspx#Initializers
Через код (как ни странно, MUCH более простой ответ)
public class MyDB : DbContext
{
public MyDB()
{
Database.SetInitializer<MyDB>(null);
}
}
или в Global.asax.cs
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
// ...
Database.SetInitializer<MyDB>(null);
/// ...
}
}
Ответ 4
Если вы нашли этот вопрос, надеясь на простой ответ, чтобы отключить миграцию, потому что вы набрали "Enable-Migrations", и теперь все работает не так, как вы ожидали, например, не запускать метод семени, который, по вашему мнению, будет работать, тогда посмотрите в проводнике решений и удалите папку Migrations. Это заставит код искать конфигурацию миграции, чтобы найти код инициализации. Чтобы вернуть папку Migrations, просто запустите "Enable-Migrations" снова.
Ответ 5
Ошибка, которую я делал, заключалась в вызове Database.SetInitializer(null); слишком поздно (после того, как контекст был инициализирован). Лучший способ обеспечить миграцию отключен - это сделать вышеуказанный вызов для всех ваших контекстов при запуске вашего приложения. Я одобряю этот подход, устанавливая его в app.config, чтобы я мог использовать свой контейнер для поиска моих контекстов, а затем для создания вызова.
var migrationsMethod = typeof(System.Data.Entity.Database).GetMethod("SetInitializer");
foreach (var contextType in allContextTypes)
{
migrationsMethod.MakeGenericMethod(contextType).Invoke(null, new object[] { null });
}
Ответ 6
Отключение автоматической миграции также можно настроить во время вызова команды enable-migrations
(которая создает класс Configuration
), используя параметр EnableAutomaticMigration
со значением false
:
enable-migrations -EnableAutomaticMigration:$false -ContextTypeName FullyQualifiedContextName
Создает класс Configuration
, который устанавливает для свойства AutomaticMigrationsEnabled
значение false, как в ответе выше.
Параметр EnableAutomaticMigration
команды enable-migrations
упоминается в этой статье на странице учебного пособия по Entity Framework (однако они используют ее с true
который, по-видимому, является значением по умолчанию).
Ответ 7
Попробуйте это, добавьте эту строку в ваш класс MyContext, она будет вызвана до вызова конструктора MyContext. Это остановит создание базы данных, а также не добавит таблицы в подключенную базу данных. По сути, эта строка отключает стратегию инициализации базы данных Code-First, которая в основном имеет стратегию по умолчанию CreateDatabaseIfNotExists.
static MyContext()
{
System.Data.Entity.Database.SetInitializer<MyContext>(null);
}