【问题标题】:Connection string: convert from config file to in code连接字符串:从配置文件转换为代码
【发布时间】:2016-03-19 16:41:25
【问题描述】:

我在让我的 Entity Framework 连接字符串从我的主应用程序和我的类库中工作时遇到了一些问题。我的主应用程序(一个 *.exe)和我的类库(一个我想与 Excel 一起使用的 COM *.dll)都需要创建到 SQL Server CE 数据库或 SQL Server 数据库的连接。

目前,我在配置文件中定义了两个“基本”连接字符串,一个用于 SQL Server CE 实现,一个用于 SQL Server 实现。这适用于我的主应用程序,因为它从配置文件(SQL Server CE 或 SQL Server)中读取适当的“基本”连接字符串,我调整连接字符串值(例如,通过 SQL 的“数据源 =”的文件位置服务器 CE 或 SQL Server 的数据库名称),我很高兴。但是,这对我的类库不起作用,因为配置文件取决于使用该库的应用程序。因此,我想通过在代码中而不是在配置文件中定义我的连接字符串来完全摆脱我的配置文件依赖关系。

当前配置文件配置如下:

<add name="ConnectionCE" providerName="System.Data.SqlServerCe.4.0" connectionString="" />

<add name="ConnectionServer" providerName="System.Data.SqlClient" connectionString="" />

然后我按如下方式创建上下文:

var context = new DbContext("name=ConnectionCE")
//Do things with the context above here, e.g. change the connection string value.

如何转换“ConnectionCE”和“ConnectionServer”连接字符串,这样我就不必依赖配置文件,并且可以直接在我的 C# 代码中创建它们(使用正确的提供程序)?

谢谢!

【问题讨论】:

    标签: c# entity-framework connection-string


    【解决方案1】:

    DbContext(string) 构造函数接受名称或连接字符串。

    您可以简单地在代码中构建连接字符串并将其传递给构造函数。

    您可以使用System.Data.SqlClient.SqlConnectionStringBuilder 类为 SQL Server 构建连接字符串。我认为,对于 SQL Server CE 连接字符串,使用string.Format() 很容易。

    SQL Server 的代码如下所示:

    var connStr = new SqlConnectionStringBuilder
    {
        InitialCatalog = "YourDb",
        IntegratedSecurity = true,
        DataSource = @".\SQLServer",
    };
    var db = new DbContext(connStr.ConnectionString);
    

    应为 SQL Server CE 指定提供程序,因此代码如下所示:

    var conn = DbProviderFactories.GetFactory("System.Data.SqlServerCe.4.0").CreateConnection();
    conn.ConnectionString = "DataSource = \"C:\\ExistingDBFile.db\"";
    var db = new DbContext(conn, true);
    

    【讨论】:

    • 加 1 用于提及 ConnectionStringBuilder
    • 有趣的是,通过设置 var db = new DbContext(@"DataSource="C:\ExistingDBFile.db"),这在我的主应用程序中再次正常工作。但是,只要我调用确切的来自我的类​​库中的相同代码,我得到异常“System.InvalidOperationException - 提供的 SqlConnection 未指定初始目录或 AttachDBFileName”。DbContext 是在外部类库中定义的(与主应用程序和类库分开)例外),那么如果它适用于主应用程序,它会适用于 Excel 类库吗?
    • 我的错。默认使用 SqlClient 提供。您需要为 SQL CE 显式指定提供程序。希望这将解决问题。我在答案中添加了详细信息。
    • 谢谢,这很好用。不幸的是,我仍然必须将配置文件添加到 Excel 目录,否则我会得到“提供程序不存在”异常。将配置文件添加到 Excel 目录后,使用适当的提供程序在配置文件中定义“entityFramework”部分并复制相关的 EntityFramework dll,一切正常。我本来希望完全摆脱配置文件,但考虑到外部应用程序 (Excel) 对库的使用,我想这是不可能的。
    猜你喜欢
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2023-03-13
    • 2011-12-06
    • 2018-11-13
    • 2020-03-17
    • 2013-04-15
    相关资源
    最近更新 更多