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

时间:2014-04-21 16:12:11

标签: asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5

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

任何人都知道如何做到这一点和/或有一个很好的例子?


编辑:由于我的应用程序安排如何,我将需要使用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()

2 个答案:

答案 0 :(得分:17)

使用配置转换。这就是他们的目的。不可否认,配置转换有点令人困惑,因为调试器实际上并没有使用它们。让我详细说明一下。

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

现在,这里的事情令人困惑。 Debug配置,尽管它的名称,在调试时从未实际使用过。更好的名称可能是DevelopmentStaging;它是用于在测试容量而不是生产中部署站点时的配置。 Release配置用于生产。因此,您需要的是在主Web.config中,指定本地开发数据库的连接字符串。然后,在DebugRelease配置中,添加转换以分别将其更改为登台/生产数据库连接字符串。当您在本地进行调试时,将使用主web.config,然后在您发布应用时,您将选择使用DebugRelease,具体取决于您将部署到的环境,然后将运行转换以适当地更改已发布的web.config

有关变换以及如何编写变换的详细信息,请参阅:http://msdn.microsoft.com/en-us/library/dd465326(v=vs.110).aspx

答案 1 :(得分:2)

将您的连接名称或连接字符串提供给DbContext构造函数。

public class YourContext : DbContext {

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

}

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

编辑:更新了示例,现在您有一个接受字符串参数的构造函数,然后在实例化时将其传递给基类。