微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有这个小方法应该创建一个名为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,或修改方法提取数据源和初始目录.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐