Sto cercando di connettere più provider di database utilizzando il primo modello del codice di entità framework, generando la stringa di connessione in modo dinamico. Ma non funziona come previsto.
Ecco il codice da recensire:
switch (providerName)
{
case "System.Data.SqlClient":
entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = providerName;
//ConfigurationManager.ConnectionStrings["mssql"].ConnectionString
break;
case "MySql.Data.MySqlClient":
entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = providerName;
//ConfigurationManager.ConnectionStrings["mysql"].ConnectionString
break;
default:
break;
}
switch (providerName)
{
case "System.Data.SqlClient":
conn = new SqlConnectionStringBuilder(entityBuilder.ProviderConnectionString)
{
UserID = databaseUserId,
Password = databasePassword,
DataSource = serverName,
IntegratedSecurity = false,
InitialCatalog = databaseName
}.ConnectionString;
break;
case "MySql.Data.MySqlClient":
conn = new MySql.Data.MySqlClient.MySqlConnectionStringBuilder(entityBuilder.ProviderConnectionString)
{
Server = serverName,
UserID = databaseUserId,
Password = databasePassword,
Database = databaseName,
PersistSecurityInfo = true
}.ConnectionString;
break;
default:
break;
}
web.config
<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider></providers> </entityFramework>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
Costruttore DbContext
` public partial class ModelCodeFist : DbContext
{
public ModelCodeFist(string connection)
: base(connection)
{
}
}
`
Inoltre, come posso cambiare il provider predefinito in fase di esecuzione, poiché EF accetta il connettore sql come defaultConnectionFactory
La connessione dinamica a mssql funziona , ma per mysql sta generando un errore perché il connettore predefinito è ancora sqlclient , controlla l'immagine qui sotto:
Fammi sapere, se ho perso qualcosa Grazie!
Si desidera creare il proprio ProviderFactory implementando IDbConnectionFactory
public class MyProviderFactory : IDbConnectionFactory
{
public DbConnection CreateConnection(string nameOrConnectionString)
{
if ("mySqlName".equals(nameOrConnectionString))
{
return new MySqlConnection("<Connection String>");
}
else
{
return new SqlConnection("<Connection String>");
}
}
}
Quindi impostalo in app.config come DefaultConnectionFactory
<defaultConnectionFactory type="MyAssmebly.MyProviderFactory, MyAssmebly">
<parameters>
Codice non testato, certamente non testato!