如何使用MySQL EF 6连接字符串

时间:2017-09-25 03:09:05

标签: c# mysql entity-framework

我使用MySQL EF 6(MySQL.Data.Entity包)连接MySQL DB。如果我使用构造函数connectionStringName :base("MyContext"),一切都会好的。但是,如果我直接使用connectionString :base("server=localhost;port=3306;database=wordpress;uid=root"),它就不起作用。应用程序引发错误System.ArgumentException: Keyword not supported: 'port'.

我的项目需要直接使用连接字符串。有谁知道如何修理它?谢谢

[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class MyContext : DbContext
{
    static MyContext()
    {
        Database.SetInitializer<MyContext>(null);
    }

    public MyContext()
        //:base("server=localhost;port=3306;database=wordpress;uid=root;password=") not work
          :base("MyContext")   // it worked if using connectionStringName
    {

    }
}

1 个答案:

答案 0 :(得分:3)

目前您正在使用DbContext构造函数,该构造函数接受来自web.config的连接字符串名称或任何直接分配的连接字符串:

public DbContext(
    string nameOrConnectionString
)

后一个参数字符串有一个主要问题,它没有提供任何方法来包含正在使用的数据库提供程序名称(你不能在那里提供providerName值,即MySql.Data.MySqlClient),因此EF自动在web.config中由defaultConnectionFactory定义的选定默认提供程序,如下所示:

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>

由于默认数据库提供程序仍设置为SQL Server,因此它不会在连接字符串中接受port作为其关键字,因此抛出ArgumentException

要解决此问题,只需change default connection factory to MySql.Data.Entity.MySqlConnectionFactory,以便MySQL现在设置为传递给DbContext的所有连接字符串的默认提供程序(假设您使用的是EF 6):

<entityFramework>
    <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
    <providers>
       <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"></provider>
    </providers>
</entityFramework>

注意:如果您提供存储在web.config中的连接字符串的名称,它将起作用,因为connectionString元素具有providerName属性,该属性将传递给EF {{1 }}:

DbContext

类似问题:

Dynamic MySQL database connection for Entity Framework 6

Entity Framework defaultConnectionFactory for MySQL