如何在Entity Framework 6.0中禁用迁移

时间:2013-09-06 21:55:37

标签: entity-framework entity ef-migrations

我正在尝试使用Entity Framework 6.0 rc1忽略“自动”迁移。我的问题是我现在不想要这个功能,每次运行我的应用程序时,我都可以看到所有实体日志都试图创建所有表格。

预期感谢。

7 个答案:

答案 0 :(得分:47)

您可以将其放在app.config的entityFramework部分中:

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

这个msdn页面讲述了Entity Framework Configuration Section的所有内容。

答案 1 :(得分:46)

试试这个:

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

<强>更新

你也可以试试这个:

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

答案 2 :(得分:26)

通过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);

        /// ...

    }
}

答案 3 :(得分:3)

我犯的错误是调用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 });                            
}

答案 4 :(得分:3)

如果你发现这个问题希望得到一个简单的答案来禁用迁移,因为你输入了“启用 - 迁移”,现在事情没有按预期的方式工作,比如没有运行你认为会运行的种子方法,那么看看在解决方案资源管理器中,删除迁移文件夹。这将阻止代码查看迁移配置以查找初始化代码。要恢复迁移文件夹,只需再次运行“启用迁移”。

答案 5 :(得分:1)

在调用enable-migrations命令(创建Configuration类)期间,使用值EnableAutomaticMigration的{​​{1}}参数,也可以配置禁用自动迁移}:

false

将创建一个enable-migrations -EnableAutomaticMigration:$false -ContextTypeName FullyQualifiedContextName 类,将Configuration属性设置为false,如上面的答案所示。


AutomaticMigrationsEnabled命令的EnableAutomaticMigration参数在Entity Framework Tutorial页面的this文章中提到(但是它们与enable-migrations一起使用它似乎是默认值)。

答案 6 :(得分:0)

尝试此操作,在MyContext类中添加此行,这将在调用MyContext构造函数之前被调用。这将停止创建数据库,也不会将表添加到连接的数据库中。基本上,此行禁用默认的“代码优先数据库初始化”策略,该策略的默认策略是“ CreateDatabaseIfNotExists”。

static MyContext()
{
       System.Data.Entity.Database.SetInitializer<MyContext>(null);
}