我试图忽略使用 Entity Framework 6.0 rc1 的“自动”迁移。我的问题是我现在不想要这个功能,每次我的应用程序运行时,我都可以看到所有实体日志都在尝试创建所有表。
期待感谢。
我试图忽略使用 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 页面介绍了有关实体框架配置部分的所有信息。
通过 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);
/// ...
}
}
如果您发现这个问题希望得到一个简单的答案来禁用迁移,因为您输入了“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 });
}
也可以在调用enable-migrations
命令(创建Configuration
类)期间配置禁用自动迁移,使用EnableAutomaticMigration
值为 的参数false
:
enable-migrations -EnableAutomaticMigration:$false -ContextTypeName FullyQualifiedContextName
将创建一个Configuration
将AutomaticMigrationsEnabled
属性设置为 false 的类,就像上面的答案一样。
该命令的EnableAutomaticMigration
参数在实体框架教程页面的这篇enable-migrations
文章中提到(但是他们使用它似乎是默认值)。true
试试这个,在你的 MyContext 类中添加这一行,这将在你的 MyContext 构造函数被调用之前被调用。这将停止创建数据库,也不会将表添加到连接的数据库中。基本上,这一行禁用了默认的 Code-First 数据库初始化策略,该策略基本上具有默认策略为 CreateDatabaseIfNotExists。
static MyContext()
{
System.Data.Entity.Database.SetInitializer<MyContext>(null);
}