【问题标题】:How to use MySQL EF 6 with connection string如何将 MySQL EF 6 与连接字符串一起使用
【发布时间】:2026-02-12 17:30:01
【问题描述】:

我使用 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
    {

    }
}

【问题讨论】:

    标签: c# mysql entity-framework


    【解决方案1】:

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

    public DbContext(
        string nameOrConnectionString
    )
    

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

    <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 DbContext

    <add name="MyContext" providerName="MySql.Data.MySqlClient" connectionString="server=localhost;port=3306;database=wordpress;uid=XXXXX;pwd=XXXXX" />
    

    类似问题:

    Dynamic MySQL database connection for Entity Framework 6

    Entity Framework defaultConnectionFactory for MySQL

    【讨论】: