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

标签 .net entity-framework runtime

在我的项目中,我想在使用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/

相关文章:

entity-framework - 从 ObjectContext 获取 DBContext

go - 为什么runtime.GC中没有调用atomic.Load加载gcphase?

java - 动态加载类后向 junit 测试套件添加拆卸方法

C#/.NET GUI 开发工具

c# - 如何在不改变方法用法的情况下将一个类移动到另一个 dll 并更改命名空间

c# - c# 中的类(使用 filehelpers)- 可空字符串在其他可空类型不存在时给出错误

javascript - 使用按钮切换数据库中的位值 - 使用 Entity Framework

entity-framework - 如何通过 Windows Azure(预览版)管理门户设置 ADO.NET Entity Framework 连接字符串?

c# - 序列化期间奇怪的内存不足异常

c# - 运行时和编译时有什么区别?