Using SqlConnectionStringBuilder for EF Connection String Raises Exception

I have this little method that should create a custom object called DataSource:

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

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

    return dbConnection;
}

The main reason I use this class ( SqlConnectionStringBuilder) is to conveniently grab the directory and data source.

When I pass the Entity Framework connection string (and initializes SqlConnectionStringBuilder) to it, I get the following exception:

Keyword not supported: 'metadata'

I could start parsing the string to check and distinguish between the Entity Framework connection string and the classic one, but really want something elegant to access both of them, without code that needs to “know” about it (because I repeat them many species in my project).

:

<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 , ?

.

+4
2

, . , , :

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 .

+1

.  marc_s EntityConnectionStringBuilder Alenjandro , , EF. EntityConnectionStringBuilder System.Data.SqlClient :

        ...
        XAttribute provider = connectionStringElement.Attribute("providerName");
        string providerValue = provider == null ? string.Empty : provider.Value;

        bool isEntityFramework = providerValue.Equals("System.Data.EntityClient");
        dbConn = BuildDataSourceFromString(connectionStringValue, isEntityFramework);
        if (dbConn == null)
        {
            return;
        }

        connectionStrings.Add(dbConn);
    }
    private static DataSource BuildDataSourceFromString(string connectionString, bool isEntityFramework)
    {
        log.InfoFormat("Is connection string entity framework ? {0}",  isEntityFramework.ToString());
        if (isEntityFramework)
        {
            EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(connectionString);
            connectionString = entityBuilder.ProviderConnectionString;
        }

        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);


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

EntityConnectionStringBuilder ProviderConnectionString, , SqlConnectionStringBuilder , if ( ) .

!

0

Source: https://habr.com/ru/post/1677173/


All Articles