我的ASP.NET MVC 4应用程序有单独的测试和生产数据库。使用Entity Framework 5,如何以编程方式在这两个数据库之间切换Entity Framework?应用程序知道哪个数据库应该在哪个时间使用,所以我只需要应用程序能够更改实体框架,以便它在正确的时间使用正确的数据库。
任何人都知道如何做到这一点和/或有一个很好的例子?
public class YourContext : DbContext {
public YourContext() : base("yourNameOrConnectionString")
{
}
}
问题是此代码不起作用:
string dbConnectionString = "MyDBTest";
using (var db = new YourContext(dbConnectionString))
{
//code to use the db
}
如何将参数发送到基类,在本例中为YourContext():base()
答案 0 :(得分:17)
使用配置转换。这就是他们的目的。不可否认,配置转换有点令人困惑,因为调试器实际上并没有使用它们。让我详细说明一下。
默认情况下,您会获得三个web.configs:Web.config
,Web.Debug.config
和Web.Release.config
。后两者与解决方案资源管理器中的第一个结合使用,但您可以展开Web.config
来查看它们。 Web.Debug.config
和Web.Release.config
是变换。它们使用特殊的XML样式语法,允许您在主Web.config
文件中更改或转换设置。每个对应一个“配置”,即“Debug”和“Release”,两者默认内置于Visual Studio中。您可以根据需要添加其他配置。
现在,这里的事情令人困惑。 Debug
配置,尽管它的名称,在调试时从未实际使用过。更好的名称可能是Development
或Staging
;它是用于在测试容量而不是生产中部署站点时的配置。 Release
配置用于生产。因此,您需要的是在主Web.config
中,指定本地开发数据库的连接字符串。然后,在Debug
和Release
配置中,添加转换以分别将其更改为登台/生产数据库连接字符串。当您在本地进行调试时,将使用主web.config
,然后在您发布应用时,您将选择使用Debug
或Release
,具体取决于您将部署到的环境,然后将运行转换以适当地更改已发布的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)
{
}
}
字符串可以是应用程序根据您要连接的数据库修改的变量。
编辑:更新了示例,现在您有一个接受字符串参数的构造函数,然后在实例化时将其传递给基类。