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

c# ef-database-first entity-framework entity-framework-5 entity-framework-6

Вопрос

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

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

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

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

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

Я думаю, ваша проблема в том, что ваши 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 .


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

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

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

Сокращения:

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

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

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

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

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

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




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