2014-01-08 3 views
5

Как EF noob Я пытаюсь использовать Entity Framework 6 Code First с MySql Server 5.6, который я установил на своем компьютере разработки.MySql Connector EF6

Я сделал очень маленький тестовый консольный проект. Я добавил пакеты 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> 

A имеют два класса:

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:

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 

Я попытался добавить MySql.Data.My SqlClient.MySqlClientFactory к 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'. 

Что я делаю неправильно?

EDIT

Я попытался удалить Пакеты NuGet (MySql.Data и MySql.Data.Entities.EF6)

Затем я установил новую версию directly from MySql и теперь выше тестовый код работает успешно?

ответ

5

вы должны держать обе секции конфигурации, как этот

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

Это ничего не меняет в моем коде. Я отредактировал свое сообщение о том, как я работал над этим. – smerlung

0

Я столкнулся с точно такой же проблемой. удалось зафиксировать его с помощью следующих NuGet пакетов:

EntityFramework 6.1.0 
MySql.ConnectorNET.Data 6.8.3.2 
MySql.ConnectorNET.Entity 6.8.3.2 
1

Я также получаю эту ошибку с EF6.1: "Не удалось определить имя поставщика для поставщика фабрики типа«MySql.Data.MySqlClient. MySqlClientFactory '. Убедитесь, что поставщик ADO.NET установлен или зарегистрирован в конфигурации приложения. «

Оказалось, что это связано с перенаправлением привязки, ссылающимся на более раннюю версию MySQL.Data (6.7.4), которая делает не поддерживают EF6.После того, как я сменил его на:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-6.8.3.0" newVersion="6.8.3.0" /> 
    </dependentAssembly> 
</assemblyBinding> 

Ошибка исчезла.

Смежные вопросы