MVC T4 MvcTextTemplateHost и индивидуальный шаблон «Контроллер» T4 - PullRequest
4 голосов
/ 15 июля 2009

Я создаю свой собственный шаблон T4, который интегрируется с моделью ADO.NET Entity Framework (файл .edmx), включенной в мое веб-приложение MVC.

Для справки

Пожалуйста, кратко рассмотрите следующие два URL.

  1. Скотт Хансельман - " Генерация кода T4 Visual Studio Best Secret "
  2. Блог группы разработчиков Visual Web - краткое руководство для разработчиков ASP.NET MVC

Краткое описание того, что я пытаюсь достичь

Использование механизма T4 для генерации класса контроллера MVC с методами Action на основе первичного ключа (ей) модели ADO.NET Entity Framework.

Что у меня есть сейчас

  1. Файлы шаблонов MVC T4 (например, Controller.tt, Create.tt и т. Д.) были включены как часть моего веб-проекта MVC.
  2. У меня есть ADO.NET Entity Framework Файл MyModel.edmx в папке " Models ".

На основе имени контроллера (например, «ProductController») , я хочу получить информацию [System.Type] класса «Product» из модели ADO.NET Entity Framework. Я хочу иметь возможность извлекать информацию System.Type так же, как файлы MVC View T4 (например, Edit.tt) , как показано ниже.

MvcTextTemplateHost mvcHost = (MvcTextTemplateHost) (Host);
Type type = mvcHost.ViewDataType;

Конечная цель

Я хочу создать генерацию кода метода Controller для чтения информации первичного ключа и т. Д. Из класса ADO.NET Entity Framework через Reflection
и
генерировать основные операции CRUD и сигнатуры методов для операций EDIT, DETAILS, ADD и т. д ...

Где я застрял

Однако, как видно из Краткое руководство по началу работы для разработчиков ASP.NET MVC , я не могу получить [System.Type] для Контроллер T4 Шаблон, потому что класс MvcTextTemplateHost предоставляет только свойство ViewDataType для создания представлений MVC.

Моя попытка получить [System.Type] по следующей методике НЕ работает, потому что modelType возвращается как null , что означает, что он не может найти тип.

Type modelType = Type.GetType(modelFullyQualifiedName, false, true);

Я предполагаю, что это происходит из-за того, что Entity Framework Model включена как часть моего веб-проекта MVC , а не включена как часть скомпилированной сборки библиотеки .DLL.

Некоторые вещи, которые помогут мне найти решение

  1. Где найти исходный код для класса MvcTextTemplateHost ? Если мне удастся найти хотя бы DLL-файл, я, вероятно, смогу посмотреть, как код загружает информацию о типе, введенную в диалоговом окне «Добавить представление» Visual Studio .
  2. Есть ли способ динамического извлечения информации System.Type о классе, включенном в проект Visual Studio, из моего шаблона T4 через API IDE Visual Studio?

Буду очень признателен, если кто-нибудь сможет мне помочь в этой теме, поскольку это позволит мне сгенерировать 75% кода для методов действий контроллера MVC для ADD, EDIT, DETAILS и т. Д. И основного кода операции CRUD. *

1 Ответ

6 голосов
/ 15 июля 2009
  1. Вы можете использовать Reflector для декомпиляции исходного кода сборки MvcTextTemplateHost из C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ Microsoft.VisualStudio.Web.Extensions.dll.

  2. Да, вы можете загрузить метаданные типа из Visual Studio, используя CodeModel . Тем не менее, вам может быть лучше прочитать его непосредственно из файла edmx. В любом случае, это существенная задача. Может быть полезным примером того, как сделать это в форме шаблона EF T4 в VS 2010.

...