2013-09-06 6 views
57

Я пытаюсь игнорировать «автоматическую» миграцию с использованием Entity Framework 6.0 rc1. Моя проблема в том, что я не хочу эту функцию прямо сейчас, и каждый раз, когда мое приложение запускается, я вижу все журналы сущностей, которые пытаются создать все таблицы.Как отключить миграцию в Entity Framework 6.0

Убедительная благодарность.

+10

Вы пытались отключить инициализатор базы данных с помощью 'Database.SetInitializer (null)'? – Pawel

+1

Позднее примечание, но название было бы более точным, если бы вы сказали «отключить автоматическую миграцию», в отличие от миграций на основе кода. – Savage

ответ

41

Попробуйте это:

internal sealed class Configuration : DbMigrationsConfiguration<YourContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
    } 
} 

UPDATE:

Вы также можете попробовать это:

Database.SetInitializer<YourContextType>(new CreateDatabaseIfNotExists()); 
+0

Создавали ли вы свои миграции вручную? –

+2

Да, теперь он работает. Наверное, я делал что-то неправильно. Проблема заключалась в том, что я удалил таблицу __migratioHistory и все файлы миграции. Я сделал Database.SetInitializer (новый NullDatabaseInitializer ()); так же, как Database.SetInitializer (null) спасибо, ребята –

+2

Ребята, я думаю, я не был ясен в своем вопросе. Я понимаю, что моя проблема в том, что у меня есть абстрактный базовый класс, который наследуется от DbContext, называемый DefaultDbContext. Проблема заключалась в том, что я сделал Database.SetInitializer (null), но правильным способом является Database.SetInitializer (null). Благодаря! –

40

Вы можете поместить это в вашем entityFramework разделе app.config:

<contexts> 
    <context type="YourNamespace.YourDbContext, YourAssemblyName" disableDatabaseInitialization="true"/> 
</contexts> 

На этой странице msdn рассказывается о Entity Framework Configuration Section.

+1

Это намного лучший способ окончательно отключить инициализацию базы данных. –

+4

На этой странице рассказывается о разделе конфигурации инфраструктуры Entity Framework: https://msdn.microsoft. com/en-us/data/jj556606 – KevinVictor

+0

Ницца. так лучше кода. – JoshYates1980

3

Ошибка, которую я делал, заключалась в вызове 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 });        
} 
+0

Любопытно, как вы получаете 'allContextTypes'? –

0

Отключение автоматической миграции также можно настроить во время Invoke в enable-migrations команды (который создает Configuration класс), используя параметр EnableAutomaticMigration со значением false:

enable-migrations -EnableAutomaticMigration:$false -ContextTypeName FullyQualifiedContextName 

будет создавать класс Configuration, который устанавливает для свойства AutomaticMigrationsEnabled значение false, как в ответе выше.


Параметр команды enable-migrationsEnableAutomaticMigration упоминается в статье this страницы Entity Framework Tutorial (однако они используют его с true который, кажется, значение по умолчанию).

23

Via web.config ВИДЕТЬ - https://msdn.microsoft.com/en-us/data/jj556606.aspx#Initializers

через код (как ни странно, НАМНОГО проще ответ)

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); 

     /// ... 

    } 
} 
+1

Для Code First EF это самый чистый ответ. – Brain2000

+2

Не помещайте его в конструктор для 'DbContext' –

+2

Где бы вы выразились? Почему не в конструкторе? (реальный вопрос, а не сарказм) –

0

Если вы нашли этот вопрос, надеясь на простой ответ, чтобы отключить миграцию, потому что вы набрали «En способным-мигрировать ", и теперь все работает не так, как вы ожидали, например, не запускать метод семени, который, по вашему мнению, будет выполняться, а затем заглянуть в проводник решений и удалить папку Migrations. Это заставит код искать конфигурацию миграции, чтобы найти код инициализации. Чтобы вернуть папку Migrations, просто запустите «Enable-Migrations» снова.

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