在Entity Framework中的运行时更改连接字符串中的数据库名称

.net entity-framework runtime

在我的项目中,我想在使用EntityFramework的DAL层上运行一些单元测试。我是在每次测试运行之前从scrips创建一个新数据库(为了在进行测试时始终使用相同的初始数据)。在测试结束时,将删除此数据库(所有这些都是在[ClassInitialize()]和[ClassCleanup()]属性的帮助下自动完成的。

生成的数据库总是有一个不同的名称,如TestDB-2009-01-31--12-00-00,以免与我的同事的测试数据库冲突。

我遇到的实际问题是我没有找到告诉EntityFramework连接到生成的数据库的方法(名称是在运行时生成的)。现在它连接到app.config文件中指定的连接字符串,这当然是正常的。因为我正在进行这些测试,所以我正在寻找可以在DAL dll外部完成的事情(不直接在EF上下文中设置任何内容)。

任何帮助是极大的赞赏。

谢谢。

一般承认的答案

创建ObjectContext时,需要使用将ConnectionString作为参数的构造函数重载。

您可以使用EntityConnectionStringBuilder构建此ConnectionString。更具体地说,假设您的基础数据库是SQL Server,您可以使用SqlConnectionStringBuilder为EntityConnectionStringBuilder.ProviderConnectionString构建值。

下面是一些构建SQL Server连接字符串的代码

var scsb = new SqlConnectionStringBuilder();
scsb.DataSource = "localhost";
scsb.InitialCatalog = "MyDB";
scsb.IntegratedSecurity = true;

这里有一些构建Entity ConnectionString的代码:

var builder = new EntityConnectionStringBuilder();
builder.Metadata = "res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl";
builder.Provider = "System.Data.SqlClient";
builder.ProviderConnectionString = scsb.ConnectionString;


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因