我试图忽略使用Entity Framework 6.0 rc1的“自动”迁移。我的问题是我现在不想要此功能,并且每次我的应用程序运行时,我都可以看到所有试图创建所有表的实体日志。
期待感谢。
Answers:
尝试这个:
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页介绍了有关“实体框架配置”部分的所有信息。
app.config
意思web.config
?
YourAssemblyName
?
通过web.config参见-https: //msdn.microsoft.com/zh-cn/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);
/// ...
}
}
DbContext
MyDB
,例如in中Application_Start()
。这是用于配置Entity Framework使用的初始化程序的静态方法,因此应在DbContext
创建之前调用它。
Database
在System.Data.Entity
名称空间中。
如果您发现此问题是因为您键入“ Enable-Migrations”而希望获得一个简单的禁用迁移的答案,而现在事情却没有按预期的方式进行,例如没有运行您认为会运行的种子方法,请查看解决方案资源管理器并删除“迁移”文件夹。这将阻止代码查看迁移配置以查找初始化代码。要找回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 });
}
allContextTypes
好吗?
也可以使用值为的参数在调用enable-migrations
命令(创建Configuration
类)期间配置禁用自动迁移:EnableAutomaticMigration
false
enable-migrations -EnableAutomaticMigration:$false -ContextTypeName FullyQualifiedContextName
会创建一个Configuration
将AutomaticMigrationsEnabled
属性设置为false的类,就像上面的答案一样。
在EnableAutomaticMigration
该参数enable-migrations
的命令中提及该文章的实体框架教程页面(但是他们用它来与true
这似乎是默认值)。
Database.SetInitializer<TContext>(null)
?