Подключение к SQL Server с EF6

entity-framework entity-framework-6

Вопрос

До EF5, чтобы подключиться к SQL Server 2012, все, что мне нужно, это указать строку подключения, которая выглядит примерно так:

Data Source=.\SqlExpress;Initial Catalog=MyDatabase;Integrated security=True;MultipleActiveResultSets=True

Этот метод не работает с EF6, предоставляя исключение

Поставщик Entity Framework не найден для поставщика ADO.NET 'System.Data.Odbc'. Убедитесь, что провайдер зарегистрирован в разделе «entityFramework» файла конфигурации приложения

Я вообще не использую файл app.config , я передаю строку подключения в конструктор MyContext. Почему он пытается использовать поставщика Odbc вообще, а вместо этого не использует System.Data.SqlClient?

Что нужно сделать для подключения к SQL Server с кодовым кодом EF6? Я убедился, что EntityFramework.dll и EntityFramework.SqlServer.dll доступны в папке приложения. Я даже добавил EF6 nuget package v6.0.0.1 в проект WPF, хотя он не использует библиотеку EF напрямую, и убедитесь, что автоматически созданный файл App.Config (по nuget) скопирован в папку Application (Debug) - все еще нет успех.

Я также попытался setprovider вручную в коде:

public class OeeCoachConfiguration : DbConfiguration
{
    public OeeCoachConfiguration()
    {
        SetProviderServices("System.Data.SqlClient",
            System.Data.Entity.SqlServer.SqlProviderServices.Instance);
    }
}

Все еще нет успеха. Моя структура проекта следующая (упрощенная):

Проект WPF - не имеет ссылки на EF (также пытался добавить ссылку EF)

Библиотека классов ViewModel - не имеет ссылки на EF

Библиотека классов моделей - имеет ссылку на библиотеку EF (обе библиотеки dll)

Библиотека классов данных - имеет ссылку на библиотеку UI (обе библиотеки dll).

Я использую подход CodeFirst, и эта настройка работает без проблем с EF5. Любая помощь приветствуется.

Принятый ответ

Для меня эта ошибка была решена путем удаления пакета Glimpse.ADO

Редактировать 20 декабря 2013 г. Я считаю, что пакет Glimpse.ADO теперь поддерживает EF6, но я его не тестировал.


Популярные ответы

У меня была та же проблема, и я в конце концов попробовал следующее, и это сработало (поддерживая пакеты Glimpse EF5 & Glimpse ADO)

В web.config я добавил копию существующей строки поставщика, но изменил ее как инвариантName на «System.Data.Odbc».

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.Odbc" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

Надеюсь, что это поможет.

Джонатан



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему