MySql连接器EF6 [英] MySql Connector 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:
- EntityFramework 6.0.2
- MySql.Data
- 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屋!