实体框架代码的动态连接字符串首先是EF6 [英] Dynamic connection string for entity framework code first EF6

查看:87
本文介绍了实体框架代码的动态连接字符串首先是EF6的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试动态生成连接字符串,以便在dbContext构造函数中作为参数传递。


根据选择生成动态连接字符串:


< pre class ="prettyprint"> switch(providerName)
{
case" System.Data.SqlClient":
conn = new SqlConnectionStringBuilder(entityBuilder.ProviderConnectionString)
{

UserID = databaseUserId,
密码= databasePassword,
DataSource = serverName,
IntegratedSecurity = false,
InitialCatalog = databaseName

} .ConnectionString;

休息;
case" MySql.Data.MySqlClient":
conn = new MySql.Data.MySqlClient.MySqlConnectionStringBuilder(entityBuilder.ProviderConnectionString)
{
Server = serverName,
UserID = databaseUserId,
Password = databasePassword,
Database = databaseName,
PersistSecurityInfo = true

} .ConnectionString;
休息;
默认值:
break;
}


将连接字符串传递给构造函数: 

 public partial class ModelCodeFist:DbContext 
{
public ModelCodeFist(string connection)
:base(connection)
{
}
}


 

<&的EntityFramework GT;
< defaultConnectionFactory type =" MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6" />
< 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"不变= QUOT; 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>

获取错误:



无法将Database.DefaultConnectionFactory设置为'MySql.Data.MySqlClient.MySqlProviderServices的实例,MySql.Data.Entity.EF6'类型在应用程序配置中指定。


如果我错过了什么,请告诉我,


谢谢!

解决方案

嗨Narendra-GlobalSysInfo,


根据您的描述和相关的错误消息,似乎DbContext想要从配置文件中检索SQL连接,但它的连接名称与配置连接名称不匹配。


请在使用DbContext时检查是否传递了正确的连接字符串。像这样:

 EntityConnection entityConn = DBConnectionHelper.BuildConnection(); 
使用(var db = new ModelCodeFist (entityConn.ConnectionString))
{
....
}

祝你好运,


Cole Wu


I am trying to generate connection string dynamically to passing as parameter in dbContext constructor.

Generating dynamic connection string based on selection:

 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;
            }

Passing connection string to constructor: 

  public partial class ModelCodeFist : DbContext
    {
        public ModelCodeFist(string connection)
            : base(connection)
        {
        }
}

<entityFramework> <defaultConnectionFactory type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"/> <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>

Getting error:

Failed to set Database.DefaultConnectionFactory to an instance of the 'MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6' type as specified in the application configuration.

Let me know if i miss something ,

Thanks!

解决方案

Hi Narendra-GlobalSysInfo,

According to your description and related error message, it seems that DbContext want to retrieve SQL connection from configuration file, but it connection name does not match the configuration connection name.

Please check if you pass the right connection string when you use DbContext. like this:

EntityConnection entityConn =DBConnectionHelper.BuildConnection();
using (var db = new ModelCodeFist(entityConn.ConnectionString))
{
....
}

Best regards,

Cole Wu


这篇关于实体框架代码的动态连接字符串首先是EF6的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆