加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用SqlConnectionStringBuilder进行EF连接字符串抛出异常

发布时间:2020-12-15 22:44:34 所属栏目:百科 来源:网络整理
导读:我有这个小方法应该创建一个名为DataSource的自定义对象: private static DataSource BuildDataSourceFromString(string connectionString){ SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString); DataSource dbConnec
我有这个小方法应该创建一个名为DataSource的自定义对象:

private static DataSource BuildDataSourceFromString(string connectionString)
{
    SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);

    DataSource dbConnection = new DataSource()
        {
            Source = builder.DataSource,Catalog = builder.InitialCatalog
        };

    return dbConnection;
}

我使用这个类(SqlConnectionStringBuilder)的主要原因是为了轻松获取目录和数据源.

当我将Entity Framework连接字符串传递给它(并初始化SqlConnectionStringBuilder)时,我得到以下异常:

Keyword not supported: ‘metadata’

我可以开始分析字符串来检查和区分实体框架连接字符串和经典字符串,但是真的想要一些优雅的东西来解决它们,而代码不必“知道”它(因为我在我的项目中迭代了很多种类) .

以下是失败的连接字符串示例:

<add name="someconnectionstring" 
     connectionString="metadata=res://*/DB.SomeDataModel.csdl|res://*/DB.SomeDataModel.ssdl|res://*/DB.SomeDataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=some-data-source;initial catalog=SomeCatalog;integrated security=True;MultipleActiveResultSets=True;MultiSubnetFailover=True;App=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" />

在经典连接字符串中不会发生此错误,例如:

<connectionStrings>
    <add name="SomeData" 
         connectionString="Server=Some-Server;Database=SomeCatalog;Integrated Security=SSPI;"
         providerName="System.Data.sqlclient"  />
</connectionStrings>

建议优雅的东西抓住两种连接字符串?我可以使用除SqlConnectionStringBuilder之外的其他东西吗?也许我应该截断一些冗余字符串并在我尝试构建之前将其从Entity Framework连接字符串中删除?

提前致谢 .

解决方法

我一直在使用自己创建的这种方法.也许它不是最优雅的解决方案,但它有效:

private static string FilterConnectionString(string connectionStringEntity,bool useProvider = true)
        {
            string result = "";
            string[] split = connectionStringEntity.Split(new char[2] { ';','"' },StringSplitOptions.RemoveEmptyEntries);
            foreach (var item1 in split)
            {
                string item = item1.Trim();
                if (item.ToLower().StartsWith("data source") ||
                   item.ToLower().StartsWith("initial catalog") ||
                   item.ToLower().StartsWith("user id") ||
                   item.ToLower().StartsWith("password") ||
                   item.ToLower().StartsWith("multipleactiveresultSets"))
                    result += item + ";";
            }
            return useProvider ? result + "provider=System.Data.SqlClient" : result;
        }

您可以使用此筛选的connectionString创建SqlConnectionStringBuilder,或修改此方法以提取数据源和初始目录.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读