Подтвердить что ты не робот

Обновление с платформы Entity Framework 5 до 6

После обновления нашего проекта от использования Entity Framework 5 до Entity Framework 6 (хотя функция обновления NuGets), я получаю следующую ошибку в моем классе Entities:

Ошибка 1 Тип или имя пространства имен "Объекты" не существует в пространстве имен "System.Data"
    (вам не хватает ссылки на сборку?)

Я понимаю, что это связано с тем, что пространство имен изменилось, и я могу вручную исправить ошибку, изменив свой импорт:    using System.Data.Objects;   и using System.Data.Objects.DataClasses; Для того, чтобы:    using System.Data.Entity.Core.Objects;

Однако файл сгенерирован, поэтому мне нужно повторно применить это исправление после каждого Update model from Database. Есть ли что-то дополнительное для изменения, чтобы получить EF для создания модели без этой ошибки.

4b9b3361

Ответ 1

Я думаю, ваша проблема в том, что ваши шаблоны T4, которые генерируют настройки и контекст, все еще находятся в EF версии 5.

Сначала вам нужно удалить текущие элементы генерации кода, которые находятся в коде позади модели, а именно <Modelname>.Context.tt и <Modelname>.tt.Next добавить новый генератор кода EF версии 6 с Right click in the model designer-> Add Code Generation Item ... -> EF 6.x DbContext Generator.

Ответ 2

Это мой опыт в том, как успешно обновить Entity Framework v5 до v6 для:

  • SQL Server.
  • С# и Visual Studio 2012.
  • База данных сначала.

Сокращения:

  • EF5 = Entity Framework v5.
  • EF6 = Entity Framework v6.

Контрольный список:

  • EF5 встроен в ядро ​​.NET 4.5, тогда как EF6 перенесен и является открытым исходным кодом.
    • Это означает, что вы должны добавить новые сборки EF6 во все соответствующие проекты в решении, в частности проект ввода.
    • Это означает, что вы должны удалить сборку System.Entity из всех проектов, так как это относится к EF5.
  • EF5 имеет единственный DLL файл EntityFramework.dll, в то время как EF6 имеет две DLL файлы:
    • EntityFramework
    • EntityFramework.SqlServer
  • EF6 требует изменений в app.config. Лучший способ сделать эти изменения - щелкнуть правой кнопкой мыши по Solution, выбрать "Управление пакетами NuGet для решения", найти "EntityFramework" и установить v6.1.0 Entity Framework во все соответствующие проекты, в частности проект ввода. Убедитесь, что вы удалите все пакеты NuGet для EF5 Framework из всех проектов. Это автоматически обновит файлы app.config, чтобы они были правильными.
  • Изучите все файлы app.config для ссылок на EF5 и удалите их.
  • Поля имен изменены:
    • Удалить строки С# using System.Data.EntityClient;, который является ссылкой EF5.
    • Добавьте строку С# using System.Data.Entity.Core.EntityClient;, которая является правильной для EF6.

Все еще застрял? Этот контрольный список является Community Wiki, не стесняйтесь редактировать этот контрольный список, чтобы помочь другим несчастным душам, которые все еще стучат головами против кирпичной стены, которая может быть конфигурацией EF6.

Обновление 2016-02-15

Пожалуйста, изучите другие варианты, прежде чем рассматривать EF. Он в 100 раз медленнее, чем другие варианты, он значительно сложнее для того, что он поставляет, графический интерфейс пользователя полон ошибок и имеет странные проблемы с удобством использования, и нам придется вырвать весь наш код EF6 и заменить его чем-то, что требуется менее 5 минут, чтобы сделать запрос, который занимает 5 секунд в Dapper.