【发布时间】:2017-10-15 02:09:50
【问题描述】:
我正在尝试使用实体框架代码优先模型通过动态生成连接字符串来连接多个数据库提供程序。但它没有按预期工作。
这是要查看的代码:
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;
}
网页配置
<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>
DbContext 构造函数
` public partial class ModelCodeFist : DbContext
{
public ModelCodeFist(string connection)
: base(connection)
{
}
}
`
我如何在运行时更改默认提供程序,因为 EF 将 sql 连接器作为 defaultConnectionFactory
动态连接到 mssql 正在工作,但是对于 mysql 它正在生成错误,因为 默认连接器仍然是 sqlclient,请查看下图:
如果我错过了什么,请告诉我 谢谢!
【问题讨论】:
标签: c# mysql sql-server entity-framework entity-framework-6