如何禁用entity framework6.0中的迁移
我试图忽略使用Entity Framework 6.0 rc1的“自动”迁移。 我的问题是,我现在不想要这个function,每当我的应用程序运行,我可以看到所有的实体日志试图创build所有的表。
期待谢谢。
尝试这个:
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 frameworkconfiguration部分 。
通过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); /// ... } }
我所做的错误是调用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 }); }
禁用自动迁移也可以在调用enable-migrations
命令(创buildConfiguration
类)期间Configuration
,使用值为false
的EnableAutomaticMigration
参数:
enable-migrations -EnableAutomaticMigration:$false -ContextTypeName FullyQualifiedContextName
将会创build一个Configuration
类,它将AutomaticMigrationsEnabled
属性设置为false,就像上面的答案一样。
enable-migrations
命令的EnableAutomaticMigration
参数在本文的entity framework教程页面中提到(但是它们使用true
,这似乎是默认值)。
如果你发现这个问题希望得到一个简单的答案来禁用迁移,因为你键入了“Enable-Migrations”,现在事情并不像你期望的那样工作,就像不运行你认为会运行的种子方法一样,然后看看解决scheme浏览器并删除Migrations文件夹。 这将停止代码查看迁移configuration来查找初始化代码。 要获取Migrations文件夹,只需再次运行“Enable-Migrations”。