Базовые сценарии использования ASP.NET MVC Scaffolding

среда, 19 октября 2011, Александр Краковецкий

Скаффолдер – это некий функционал, который ответственный за генерацию некоторого кода. Как правило, состоит из PowerShell скрипта и набора Т4 шаблонов.

Для того, чтобы увидеть список доступных скаффолдеров, необходимо выполнить команду Get-Scaffolder в Package Manager Console:

Get-Scaffolder

Результат:

alt text

Каждый скаффолдер имеет уникальное имя, например MvcScaffolding.RazorView. У вас может быть несколько скаффолдеров, которые будут отвечать за генерацию представлений, которые будут отличаться именами:

Scaffold MvcScaffolding.AspxView Index Team

Скаффолдеры могут принимать на вход набор параметров. В PowerShell параметры передаются с помощью дефиса ("-"). Для того, чтобы увидеть список всех доступных параметров наберите дефис и нажмите tab:

alt text

Некоторые из этих параметров уникальные для конкретного скаффолдера, некоторые – общие для PowerShell.

Скаффолдеры по умолчанию

Вам не нужно вводить уникальное имя скаффолдера полностью, если вы хотите использовать, например, MvcScaffolding.RazorView для всех представлений. Для этого используются скаффолдеры по умолчанию.

Для того, чтобы увидеть список скаффолдеров по умолчанию, введите:

Get-DefaultScaffolder

Результат:

alt text

Как видно с изображения, имена по умолчанию являются более коротким аналогом уникальных полных имен, например Controller, Repository или View.

Информация о соответствии дефолтных скаффолдеров с их реальными именами хранится в конфигурационном XML файле. Для изменения настроек по умолчанию можно воспользоваться командой Set-DefaultScaffolder, например:

Set-DefaultScaffolder View MvcScaffolding.AspxView

Теперь, если вы выполните еще раз команду Get-DefaultScaffolder, то увидите MvcScaffolding.AspxView напротив View.

alt text

Нужно отметить, что когда скаффолдеры вызывают другие скаффолдеры (например Controller использует вызов Repository и View), то используются короткие имена, поэтому изменение, к примеру, View автоматически изменил дефолтное поведение Controller.

Эти настройки хранятся на уровне отдельного проекта, поэтому вы можете настраивать разные проекты по своему. Но с помощью флага -SolutionWide можно задавать параметры для всего решения.

Использование встроенных скаффолдеров

Несколько примеров того, как вы можете работать с скаффолдерами:

Scaffold Controller

В результате выполнения этой команды сгенерируется контроллер с реализацией CRUD операций (с использованием EF 4.1 Code First) и представления Create, Details, Delete, Edit и Index.

Параметры, которые можно использовать:

  • -ControllerName: имя контроллера, которое вы хотите использовать. Если вы введете что-то похожее на название контроллера, например, ProductsController или ProductController, то это имя и будет использоваться (также будет искаться модель с названием Product или Products). Если же вы введете название модели, например, Product, то будет использовано имя ProductsController для генерации контроллера.
  • -ModelType: по умолчанию тип модели будет определяться из названия контроллера, но если вы хотите, чтобы ваш контроллер и модель имени совершенно разные имена, то вы можете указать конкретный тип модели с использованием этого параметра. Этот тип будет искаться в ваших проектах, но не в внешних сборках.
  • -Project: с помощью этого параметра можно определить, в какой проект будет генерироваться результат работы скаффолдера, если у вас больше одного проекта в solution.
  • -CodeLanguage: значения "cs" или "vb" задают программный язык для кода. По умолчанию используется язык вашего текущего проекта. Теоретически можно вести, например, "fsharp" или другой язык – в таком случае скаффолдер будет искать необходимый шаблон для этого языка.
  • -DbContextType: можно задать имя класса database context. По умолчанию будет использоваться шаблонContext, например, SoccerSiteContext.
  • -Repository: это переключатель, что означает, что флаг не имеет значения. Простое добавление –Repository будет говорить о том, что необходимо дополнительно генерировать репозиторий для работы с data context и контроллер, который будет использовать интерфейс для работы с данными.
  • -Area: если вы хотите сгенерировать файлы, которые пойдут в конкретную area, необходимо ввести ее имя. Нужно помнить, что area уже должна быть создана, так как скаффолдеры не умеют пока создавать area автоматически.
  • -Layout: (также можно использовать –MasterPage) если вы хотите использовать специфическую Razor разметку или ASPX Master Page, введите путь, например, “-Layout /Views/Shared/_SomeLayout.cshtml”. В противном случае, если вы не укажите значение этого параметра, то в случае Razor будет считаться, что у вас есть заданный layout по умолчанию, а в случае с ASPX будет добавлена Master Page по умолчанию (~/Views/Shared/Site.Master). Если ничего не будет найдено, то сгенерируется полный HTML код без master page.
  • -Force: по умолчанию, вы не можете переписать существующие файлы. Этот флаг используется для замены существующих файлов.
  • -NoChildItems: если по какой то причине вам надо только сгенерировать класс контроллера, то используйте этот переключатель.

Scaffold View

В этом случае будет сгенерировано пустое представление для заданного котроллера. Также вы можете дополнительно указать:

  • -Template: должен быть одним из значений Create, Delete, Details, Edit, Index или Edit.
  • -ModelType: создает типизированное представление для заданного типа данных.

Другие допустимые параметры: –Project, –Area, –Layout, –CodeLanguage, –Force.

Scaffold Views

В результате получим все CRUD представления: Create, Delete, Details, Edit и Index.

Scaffold DbContext

В результате получим класс контекста Entity Framework Code First для заданного типа модели. Если такой класс уже существует, то будет добавлено свойство DbSet.

Другие возможные параметры:

  • -Folder: задает имя директории, куда будет сгенерирован файл. По умолчанию используется директория /Models.
  • -Area: если значение –Folder не задано, то использование этого параметера добавит файл в директорию /Areas//Models.
  • –Project, –Force и т.д.

Scaffold Repository

В результате получим интерфейс репозитория с названием вашего типа модели, например IProductRepository, а также реализацию, которая будет работать с Entity Framework Code First.


Ищите нас в интернетах!

Комментарии

Свежие вакансии