web-dev-qa-db-ja.com

Entity Framework 6.0で移行を無効にするにはどうすればよいですか

Entity Framework 6.0 rc1を使用した「自動」移行を無視しようとしています。私の問題は、現在この機能が必要ないことです。アプリケーションを実行するたびに、すべてのテーブルを作成しようとするすべてのエンティティログを確認できます。

ありがとう。

66
Michel Borges

これを試して:

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

更新:

これを試すこともできます:

Database.SetInitializer<YourContextType>(new CreateDatabaseIfNotExists());
46

App.configのentityFrameworkセクション内にこれを配置できます。

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

このmsdnページでは、 Entity Framework Configuration Section についてすべて説明しています。

47
Carlos Teixeira

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のor

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        // ...

        Database.SetInitializer<MyDB>(null);

        /// ...

    }
}
26
Aaron Sherman

「Enable-Migrations」と入力したために移行を無効にする簡単な答えを望んでいるこの質問を見つけて、実行すると思ったシードメソッドを実行しないなど、物事が期待どおりに機能しない場合は、ソリューションを見てくださいエクスプローラーでMigrationsフォルダーを削除します。これにより、コードが初期化コードを見つけるために移行構成を調べることができなくなります。 Migrationsフォルダーを元に戻すには、「Enable-Migrations」を再度実行します。

4
javovo

私が犯した間違いは、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 });                            
}
3
user663470

ConfigurationパラメーターにEnableAutomaticMigrationの値を使用して、enable-migrationsコマンド(falseクラスを作成)の呼び出し中に自動移行を無効にすることも構成できます。

enable-migrations -EnableAutomaticMigration:$false -ContextTypeName FullyQualifiedContextName

上記の回答のように、Configurationプロパティをfalseに設定するAutomaticMigrationsEnabledクラスを作成します。


enable-migrationsコマンドのEnableAutomaticMigrationパラメーターについては、Entity Frameworkチュートリアルページの this 記事に記載されています(ただし、trueで使用します)デフォルト値のようです)。

1
Martin