Генерация кода Entity Framework 6 t4 не работает в VS2022?

У меня есть старый проект, созданный с использованием VS2019 с Entity Framework 6 на .NET 4.5. Сначала мы использовали базу данных для генерации кода. Это сработало очень хорошо.

Однако мы только начали использовать VS2022 V17.6.2, мне нужно обновить приложение с новой таблицей, поэтому я добавил таблицу в model.edmx, запустил файл .tt, к моему удивлению, он показывает ошибку, подобную этой:

Ошибка
Выполнение преобразования: System.NullReferenceException: ссылка на объект не указывает на экземпляр объекта.

в Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11 743F78068A.GeneratedTextTransformation.DynamicTextTransformation.get_GenerationEnvironment() в C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\EF6.Utility.CS .ttinclude: строка 1928 в Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11 743F78068A.GeneratedTextTransformation.EntityFrameworkTemplateFileManager..ctor(Object textTransformation) в C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\EF6. Utility.CS.ttinclude:строка 1665 в Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11 743F78068A.GeneratedTextTransformation.EntityFrameworkTemplateFileManager.VsEntityFrameworkTemplateFileManager..ctor(Object textTemplating) в C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\ EF6.Utility.CS.ttinclude:строка 1784 в Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11 743F78068A.GeneratedTextTransformation.EntityFrameworkTemplateFileManager.Create(Object textTransformation) в C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\EF6.Utility .CS.ttinclude:строка 1629 в Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11 743F78068A.GeneratedTextTransformation.TransformText() в C:\test\Code\ConsoleAppTest\TestModel.tt:строка 10 Разные файлы C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\ Microsoft\Entity Framework Tools\Templates\Includes\EF6.Utility.CS.ttinclude 1928

Итак, я сравнил новый файл .tt со старым, обнаружил некоторые изменения, например, это было EF.Utility.CS.ttinclude не EF6.Utility.CS.ttinclude. Итак, я попробовал тот, который у нас был раньше, все та же ошибка в VS2022.

Я попытался применить последнюю версию 6.4.4, измененную на использование .net framework 4.8, все то же самое. Пытался отладить шаблон T4, все та же ошибка.

Теперь мне нужно вручную создать код для вновь добавленной таблицы. Есть ли обходной путь? Означает ли это, что мы больше не можем использовать генерацию кода в VS2022 для Entity Framework 6 для .NET Framework 4.8 (или ниже)?

Я добавил таблицу в model.edmx -- Что означает "обновить модель из базы данных"?

Gert Arnold is on strike 28.05.2023 19:43

Да, добавил в базу, потом обновил модель в vs2022

urlreader 28.05.2023 20:11

Я подозреваю, что это связано с некоторыми установками. Это новая машина win11, новая установка .Net и vs2022. Прямо сейчас я просто вручную создаю новые файлы сущностей, добавляю их в сгенерированную папку. Это работает, но просто любопытно, почему шаблон t4 больше не работает.

urlreader 28.05.2023 21:04

Я вижу это: developercommunity.visualstudio.com/t/… , попробую

urlreader 28.05.2023 21:16

Смотрите также stackoverflow.com/q/76353796/861716

Gert Arnold is on strike 31.05.2023 13:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
5
1 107
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это известная ошибка Visual Studio 2022 v17.6+.

Как написал @urlreader, в настоящее время существует открытая проблема для сообщества разработчиков Microsoft, и доступен обходной путь, ожидающий исправления.

Обходной путь сообщает:

  1. Отредактируйте файл EF6.Utility.CS.ttinclude, доступный здесь.

C:\Program Files\Майкрософт Визуал Studio\2022\Professional\Common7\IDE\Extensions\Microsoft\Entity Инструменты платформы\Шаблоны\Включает

  1. Найдите следующую строку

частный DynamicTextTransformation (экземпляр объекта)

  1. Замените настройку _generationEnvironment с

_generationEnvironment = type.GetProperty("GenerationEnvironment", BindingFlags.Instance | BindingFlags.NonPublic);

  1. к этому

_generationEnvironment = type.GetProperty("GenerationEnvironment");

  1. Теперь вы можете повторить попытку.

Спасибо! Только что обновился до VS 17.6 и подумал, что схожу с ума.

Neil Laslett 30.05.2023 23:57

Спасибо, что разъяснили это. У меня также работал эквивалент VB: редактирование EF6.Utility.VB.ttinclude и замена _generationEnvironment = type.GetProperty("GenerationEnvironment", BindingFlags.Instance Or BindingFlags.NonPublic) на: _generationEnvironment = type.GetProperty("GenerationEnvironment")

Plate 05.06.2023 03:17

@NeilLaslett Я тоже :(

stefmex 07.06.2023 07:34

Другие вопросы по теме