Изменение стратегии генерации кода EF 6 с T4

В прошлом я успешно создал файлы edmx. Это использовало EF5 и Visual Studio 2012. С тех пор я обновился до Visual Studio 2013 и EF6. Существующий код EF 5 все еще работает, но теперь у меня проблема. Я могу создавать файлы edmx и EntityDataSource, я могу настроить источник данных, он отлично видит таблицы и столбцы, но когда я пытаюсь обновить схему, я получаю:

Не удалось определить схему из-за следующей ошибки в EntityDataSource:

Не удалось найти тип CLR для (мой тип здесь)

Я видел решение в режиме онлайн, предлагающее мне изменить мою стратегию генерации кода на значение по умолчанию (существующие файлы edmx, созданные в EF 5, установлены как Legacy ObjectContext), но это не позволит мне сделать это, потому что опция ' T4 'выделен серым цветом.

enter image description here

Есть ли способ заставить Code Generation Strategy не использовать T4?

EDIT:

Pawel заявляет, что EntityDataSource не поддерживает EF 6. Имеется ли учебное пособие, в котором показано простое пошаговое руководство по подключению к EF 6? У меня есть все мои данные EF из книги Beginning ASP.Net 4, но теперь она явно устарела. Я вижу, что EF 6 все еще находится в стадии бета-тестирования. Может быть, они добавят поддержку EntityDataSource на какой-то стадии?

ИЗМЕНИТЬ 2:

ОК, я немного поиграл с этим, и я могу подключиться с помощью LinqDataSource. У меня не будет возможности поиграть с ним много в течение нескольких дней, но похоже, что это работает.

ИЗМЕНИТЬ 3:

Использование LinqDataSource не работает. Единственная операция CRUD, которую он может выполнить, - Read. Очевидно, что должен быть способ использовать новую среду EF 6.0 (Pawel предположил, что я использую MVC), но они не могли полностью ее сломать для моего сценария (используя веб-сайт), не могли ли они?

ИЗМЕНИТЬ 4:

Я нашел решение для своего сценария, см. мой ответ ниже.

Ответы

Ответ 1

Из-за изменений в EF6, если вы используете EF6 в VS2012/VS2013, единственной поддерживаемой стратегией генерации является T4. Вы можете получить объекты на основе EntityObject и контекст на основе ObjectContext, используя T4 шаблоны из VS Gallery. Примечание. EntityDataSource в настоящее время не поддерживает EF6.

ИЗМЕНИТЬ

Предварительный просмотр EntityDataSourceControl с поддержкой EF6 теперь доступен

Ответ 2

В Ef6 вы можете использовать устаревший контекст. Просто щелкните правой кнопкой мыши файл edmx и в открывшемся окне выберите его в средстве просмотра XML. Затем выполните поиск устаревшего значения и установите его значение как true.

Ответ 3

У меня уже есть сообщество VS2013, и я сражался с той же проблемой. Как и ваш образ, стратегия генерации кода была отключена, я имею в виду, что это невозможно было изменить, но... щелкните правой кнопкой мыши по названию свойства "Code Generation Strategy", затем просто нажмите "Reset" и значение свойства изменится на Legacy ObjectContext!

Я надеюсь, что это может помочь кому-то!

PD: Извините, мой англичанин! хр

Ответ 4

Как упоминает Павел, вы можете использовать T4 только в EF 6. Что я сделал, чтобы вернуть свою систему к использованию EF 5, было удаление EF 6 с помощью диспетчера пакетов NuGet (Веб-сайт → Управление пакетами NuGet → Установленные пакеты → EntityFramework → Uninstall). Затем мне пришлось добавить EF 5 с помощью диспетчера пакетов NuGet (то же меню, но вместо Online Installed Packages). Затем мне пришлось удалить следующее из web.config:

<providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>

Теперь, когда я добавляю ADO.NET Entity Data Model, он спрашивает, какую версию Entity Framework я хочу использовать, но Entity Framework 6.0 неактивен. Очевидно, это ошибка, она должна спросить об этом, когда установлен EF 6.0, а не когда это не так. Когда он был установлен, он никогда не спрашивал, какую версию я хотел и просто создал edmx для версии 6.0

Ответ 5

У меня такая же проблема и (EF6), и когда я изменил обработку артефакта метаданных на "Копировать в выходной каталог", я все равно получаю ту же ошибку. Это было предложено как решение большинства моих проблем.

Мои действия (для воспроизведения ошибки):

Создайте каталог с именем DAL, добавьте edmx файл, позвольте ему создать строку подключения, добавьте две таблицы, выполните сборку.

Создайте страницу default.aspx, перетащите объект EntityDataSource с панели инструментов, щелкните выпадающий файл Configure DataSource, выберите мое имя Connection сверху и получите ошибку:

Метаданные, указанные в строке подключения, не могут быть загружены. Попробуйте перестроить веб-проект для сборки сборок, содержащих метаданные. Произошли следующие ошибки: поставщик не возвратил экземпляр ProviderManifest.

Пробовал найти решение около 24 часов.

Итак, теперь, когда я выбираю EF5 (не 6), и делаю шаги выше, я нажимаю правой кнопкой мыши по поверхности диаграммы и перехожу к свойствам, которые я меняю двумя настройками:

1.) Обработка артефактов в "Копировать в выходной каталог" 2.) Измените стратегии генерации кода на "Legacy ObjectContext" с T4

Позволяет мне перетащить EntityDataSource из панели инструментов, щелкнуть выпадающим меню Configure DataSource, выбрать мое имя Connection сверху, и все возвращается в мир любви программирования...

Только у меня было 24 часа и 2 потраченных дня кодирования, чтобы окончательно собрать подходящее решение. И мой ноутбук был сплющен и переустановлен, b/c Я был в отчаянии и вытаскивал свои волосы.

Ответ 6

Я использую visual studio 2015

  • Dbl щелкните по файлу xxx.edmx в проводнике решений, это должно открыть diagarm в дизайнере,

  • нажмите alt + enter, который открывает окно свойств

  • Ищите "Стратегия генерации кода" - выберите значение T4 из раскрывающегося списка в "Содержимое устаревшего объекта".