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

时间:2009-09-29 16:12:43

标签: .net entity-framework runtime

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

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

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

非常感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:39)

创建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;