【问题标题】:change db name in connection string at runtime in Entity Framework在实体框架中运行时更改连接字符串中的数据库名称
【发布时间】:2009-09-29 16:12:42
【问题描述】:

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

生成的数据库总是有不同的名字,比如TestDB-2009-01-31--12-00-00,为了不和我同事的测试数据库冲突。

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

非常感谢任何帮助。

谢谢。

【问题讨论】:

    标签: .net entity-framework runtime


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-08
      • 2013-09-21
      • 2011-01-17
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多