MySql连接器EF6 [英] MySql Connector EF6

查看:274
本文介绍了MySql连接器EF6的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

作为一个EF noob,我试图使用我的开发计算机上安装的MySql Server 5.6的Entity Framework 6 Code First。

As a EF noob I am trying to use Entity Framework 6 Code First with a MySql Server 5.6 which I installed on my development computer.

小测试台项目。我添加了NuGet软件包:

I have made a very small test console project. I have added the NuGet packages:


  1. EntityFramework 6.0.2

  2. MySql.Data

  3. MySql.Data.Entities.EF6

我的App.config如下所示:

My App.config looks like this:

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

A有两个类:

MyContext :

MyContext:

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

    public DbSet<MyEntity> MyEntities { get; set; }
}

MyEntity:

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

    public string Name { get; set; }
}

我的主要方法如下:

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

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

When I run it I get a System.NotSupportedException:

Unable to determine the provider name for provider factory of type
'MySql.Data.MySqlClient.MySqlClientFactory'. Make sure that the 
ADO.NET provider is installed or registered in the application config

I尝试将MySql.Data.MySqlClient.MySqlClientFactory添加到App.config中:

I tried to add MySql.Data.MySqlClient.MySqlClientFactory to the App.config:

<provider invariantName="MySql.Data.MySqlClient.MySqlClientFactory" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data"></provider>

但是,我到达了 Entity.Core 错误:

The 'Instance' member of the Entity Framework provider type
'MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.8.3.0,
Culture=neutral, PublicKeyToken=c5687fc88969c44d' did not return an object 
that inherits from 'System.Data.Entity.Core.Common.DbProviderServices'.

我做错了什么?

编辑

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

I tried removing the NuGet Packages (MySql.Data and MySql.Data.Entities.EF6)

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

Then I installed the new version directly from MySql and now the above test code runs successfully?

推荐答案

你必须保持两个配置部分,
这样的

you must keep both config sections, like this

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

这篇关于MySql连接器EF6的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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