Entity Framework 6.0 rc1を使用した「自動」移行を無視しようとしています。私の問題は、現在この機能が必要ないことです。アプリケーションを実行するたびに、すべてのテーブルを作成しようとするすべてのエンティティログを確認できます。
ありがとう。
これを試して:
internal sealed class Configuration : DbMigrationsConfiguration<YourContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
}
更新:
これを試すこともできます:
Database.SetInitializer<YourContextType>(new CreateDatabaseIfNotExists());
App.configのentityFrameworkセクション内にこれを配置できます。
<contexts>
<context type="YourNamespace.YourDbContext, YourAssemblyName" disableDatabaseInitialization="true"/>
</contexts>
このmsdnページでは、 Entity Framework Configuration Section についてすべて説明しています。
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);
/// ...
}
}
「Enable-Migrations」と入力したために移行を無効にする簡単な答えを望んでいるこの質問を見つけて、実行すると思ったシードメソッドを実行しないなど、物事が期待どおりに機能しない場合は、ソリューションを見てくださいエクスプローラーでMigrationsフォルダーを削除します。これにより、コードが初期化コードを見つけるために移行構成を調べることができなくなります。 Migrationsフォルダーを元に戻すには、「Enable-Migrations」を再度実行します。
私が犯した間違いは、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 });
}
Configuration
パラメーターにEnableAutomaticMigration
の値を使用して、enable-migrations
コマンド(false
クラスを作成)の呼び出し中に自動移行を無効にすることも構成できます。
enable-migrations -EnableAutomaticMigration:$false -ContextTypeName FullyQualifiedContextName
上記の回答のように、Configuration
プロパティをfalseに設定するAutomaticMigrationsEnabled
クラスを作成します。
enable-migrations
コマンドのEnableAutomaticMigration
パラメーターについては、Entity Frameworkチュートリアルページの this 記事に記載されています(ただし、true
で使用します)デフォルト値のようです)。