Asp.net mvc 如何使用Entity Framework 5在测试数据库和生产数据库之间切换

Asp.net mvc 如何使用Entity Framework 5在测试数据库和生产数据库之间切换,asp.net-mvc,entity-framework,asp.net-mvc-4,entity-framework-5,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,Entity Framework 5,我的ASP.NETMVC4应用程序有单独的测试和生产数据库。使用EntityFramework 5,如何让EntityFramework以编程方式在这两个数据库之间切换?应用程序知道在什么时候应该使用哪个数据库,所以我只需要应用程序能够更改实体框架,以便在正确的时间使用正确的数据库 有人知道如何做到这一点和/或有一个好的例子吗 编辑:由于我的应用程序是如何安排的,我需要使用GvM的答案。然而,剩下的最后一件事是,我不知道如何向基类发送参数。我的意思是: public class YourCon

我的ASP.NETMVC4应用程序有单独的测试和生产数据库。使用EntityFramework 5,如何让EntityFramework以编程方式在这两个数据库之间切换?应用程序知道在什么时候应该使用哪个数据库,所以我只需要应用程序能够更改实体框架,以便在正确的时间使用正确的数据库

有人知道如何做到这一点和/或有一个好的例子吗


编辑:由于我的应用程序是如何安排的,我需要使用GvM的答案。然而,剩下的最后一件事是,我不知道如何向基类发送参数。我的意思是:

public class YourContext : DbContext {

    public YourContext() : base("yourNameOrConnectionString")
    {
    }

}
问题是此代码不起作用:

string dbConnectionString = "MyDBTest";

using (var db = new YourContext(dbConnectionString))
{
    //code to use the db
}

如何向基类发送参数,在本例中是YourContext():base()

使用配置转换。这就是他们在那里的目的。诚然,配置转换有点混乱,因为调试器实际上没有使用它们。让我详细说明一下

默认情况下,您会得到三个web.config:
web.config
web.Debug.config
web.Release.config
。后两者与解决方案资源管理器中的第一个结合在一起,但您可以展开
Web.config
查看它们
Web.Debug.config
Web.Release.config
是转换。它们使用特殊的XML样式语法,允许您更改或转换主
Web.config
文件中的设置。每个都对应一个“配置”,即“调试”和“发布”,默认情况下这两个配置内置于VisualStudio中。您可以根据需要添加其他配置

现在,这里是令人困惑的地方。
Debug
配置,尽管名称不同,在调试时从未实际使用过。更好的名称可能是
开发
登台
;当您以测试能力部署站点时,而不是将站点部署到生产环境中时,将使用此配置。
Release
配置用于生产。因此,您需要在main
Web.config
中指定本地开发数据库的连接字符串。然后,在
Debug
Release
配置中,分别添加一个转换以将其更改为暂存/生产数据库连接字符串。在本地调试时,将使用主
web.config
,然后在发布应用程序时,根据要部署到的环境选择使用
Debug
Release
,然后将运行转换以适当地修改发布的
web.config


有关转换以及如何编写转换的详细信息,请参阅:

向DbContext构造函数提供连接名称或连接字符串

public class YourContext : DbContext {

    public YourContext(string connection) : base(connection)
    {
    }

}
字符串可以是应用程序根据要连接的数据库修改的变量


编辑:更新了该示例,这样您就有了一个接受字符串参数的构造函数,该参数在实例化时会传递给基类。

谢谢,但是如何更改在.Context.cs类中为该方法设置的名称呢?基本上,我不知道如何以编程方式将“yourNameOrConnectionString”更改为“MyDBProd”或“MyDBTest”。这就是我遇到问题的地方:使用(var db=new MyContext(“MyDBTest”))我的假设是我可以在这里输入任何连接字符串的名称,但这不起作用。我得到一个错误,指出没有接受1个参数的上下文构造函数。我不明白如何将参数传递给这个构造函数,并将其传递给base()类(如您的示例所示)。如何用调用中的变量替换“yourNameOrConnectionString”?更新了示例,以便可以将参数传递给派生的上下文类。