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

Mar*_*nez 1 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
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

Tet*_*oto 5

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

public DbContext(
    string nameOrConnectionString
)
Run Code Online (Sandbox Code Playgroud)

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

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
Run Code Online (Sandbox Code Playgroud)

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

要解决此问题,只需将默认连接工厂更改为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>
Run Code Online (Sandbox Code Playgroud)

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

<add name="MyContext" providerName="MySql.Data.MySqlClient" connectionString="server=localhost;port=3306;database=wordpress;uid=XXXXX;pwd=XXXXX" />
Run Code Online (Sandbox Code Playgroud)

类似问题:

Entity Framework 6 的动态 MySQL 数据库连接

MySQL 的实体框架 defaultConnectionFactory