Как отключить миграцию в 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);
}