在我的项目中,我想在使用EntityFramework的DAL层上运行一些单元测试。我要在每次测试运行之前从脚本创建一个新的数据库(以便在进行测试时始终具有相同的初始数据)。在测试结束时,将删除该数据库((通过[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;
这是一些构建实体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;
关于.net - 在Entity Framework中在运行时更改连接字符串中的数据库名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1493554/