Изменение стратегии генерации кода 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 из раскрывающегося списка в "Содержимое устаревшего объекта".