MySql连接器EF6

sme*_*ung 8 mysql entity-framework

作为EF noob,我试图使用我在开发计算机上安装的MySql Server 5.6实现Entity Framework 6 Code First.

我做了一个非常小的测试控制台项目.我添加了NuGet包:

  1. EntityFramework 6.0.2
  2. MySql.Data
  3. MySql.Data.Entities.EF6

我的App.config看起来像这样:

<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <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"></provider>
    </providers>
</entityFramework>
Run Code Online (Sandbox Code Playgroud)

有两个类:

MyContext:

public class MyContext : DbContext
{
    public MyContext(DbConnection connection)
        : base(connection, true)
    {
    }

    public DbSet<MyEntity> MyEntities { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

myEntity所:

public class MyEntity
{
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的主要方法如下:

static void Main(string[] args)
{
    using (MySqlConnection conn = new MySqlConnection("Server=127.0.0.1;Database=calibrationtest;Uid=calibration;Pwd=*******"))
    {
        using (MyContext context = new MyContext(conn))
        {
            context.MyEntities.Add(new MyEntity()
            {
                Name = "1234"
            });

            context.SaveChanges();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到一个System.NotSupportedException:

无法确定类型为"MySql.Data.MySqlClient.MySqlClientFactory"的提供程序工厂的提供程序名称.确保在应用程序配置中安装或注册了ADO.NET提供程序

我试图将MySql.Data.MySqlClient.MySqlClientFactory添加到App.config:

<provider invariantName="MySql.Data.MySqlClient.MySqlClientFactory" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data"></provider>
Run Code Online (Sandbox Code Playgroud)

但后来我到达了Entity.Core Bug:

实体框架提供程序类型'MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data,Version = 6.8.3.0,Culture = neutral,PublicKeyToken = c5687fc88969c44d'的'Instance'成员未返回继承自'System.Data的对象.Entity.Core.Common.DbProviderServices'.

我究竟做错了什么?

编辑

我尝试删除NuGet包(MySql.Data和MySql.Data.Entities.EF6)

然后我直接从MySql安装了新版本,现在上面的测试代码成功运行了吗?

小智 7

你必须保留两个配置部分,就像这样

  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite" />    <add name="SQLite Data Provider" description=".Net Framework Data Provider for SQLite" invariant="System.Data.SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
      <remove invariant="MySql.Data.MySqlClient" /><add name="MySQL" description="ADO.Net driver for MySQL" invariant="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data"/>
    </DbProviderFactories>
  </system.data>

  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SQLite"     type="System.Data.SQLite.SQLiteProviderServices, System.Data.SQLite.Linq, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"></provider>      
    </providers>
  </entityFramework>
Run Code Online (Sandbox Code Playgroud)