ASP.NET MVC 3 Scaffolding с помощью библиотеки MvcScaffolding

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

Одним из нововведений последнего обновления ASP.NET является возможность скаффолдинга, с помощью которого можно автоматизировать работу разработку типовых сценариев ( в случае, если вы знаете, что хотите создать).

The term “Scaffolding” is used by many software technologies to mean “quickly generating a basic outline of your software that you can then edit and customise”.

Библиотека, с помощью которой можно скаффолдить приложения, имеет название MvcScaffolding. Ее можно использовать в таких сценариях:

  • если вы изучаете ASP.NET MVC, так как в таком случае вы можете быстро получить рабочий код, который будет решать простые задачи;
    • если вы уже знакомы с ASP.NET MVC, то вы сможете ознакомиться с новыми возможностями – объектно-реляционный маппингом (object-relational mapper), разметкой (view engine) и т.д.
    • если вам необходимо создавать большое количество похожих классов или файлов определенного класса, то вы сможете создавать собственные скаффолдеры, скрипты для развертывания и т.д.

Другие возможности MvcScaffolding:

  • поддержка проектов на C# и VB.NET;
  • поддержка разметок Razor и ASPX;
  • поддержка скаффолдинга на уровне ASP.NET MVC areas;
  • изменение T4 шаблонов для управления генерируемого коды;
  • написание новых скаффолдоров использую PowerShell и пользовательские T4 шаблоны;
  • есть возможность загрузить дополнительные скаффолдеры с помощью NuGet для других технологий.

Установка

Если кротко, то установка с помощью NuGet выглядит таким образом:

Install-Package MvcScaffolding

Полная версия:

  1. Необходимо установить ASP.NET MVC 3 Update вместе с последней версией NuGet.
  2. Открыть или создать новый ASP.NET MVC 3 проект.
  3. Установить библиотеку MvcScaffolding. Для этого необходимо в командной строке Package Manager Console ввести

Install-Package MvcScaffolding

alt text

Кроме, собственно, MvcScaffolding будет добавлено и другие библиотеки:

  • EFCodeFirst – Entity Framework Code First – новая версия Entity Framework, которая позволяет мапить .NET объекты на реляционную базу без сложных конфигураций;
  • T4Scaffolding представляет ядро инфраструктуры для скаффолдинга;
  • MvcScaffolding добавляет ASP.NET MVC шаблоны (для controllers и views), которые построены на базе T4Scaffolding.

Скаффолдинг CRUD операций

Для начала создадим модель для футбольной команды. Добавим новый класс в папку Models и скомпилируем приложение.

namespace SoccerSite.Models
{
    public class Team
    {
        public int TeamId { get; set; }
        [Required] public string Name { get; set; }
        public string City { get; set; }
        public DateTime Founded { get; set; }
    }
}

Теперь мы можем создать CRUD (Create-Read-Update-Delete) UI для нашей модели с помощью вызова команды в Package Manager Console:

Scaffold Controller Team

alt text

Как вы можете видеть, создался контроллер, database context и все views для CRUD операций. Если вы запустите проект, то EFCodeFirst автоматически подсоединится к базе данных, создаст схему на базе нашей модели и создаст простой интерфейс для работы с моделью.

Убедиться в этом можно введя в адресную строку адрес http://…/team:

alt text

В данный момент база пустая.

alt text

Создание новой записи. Проверка вводимых значений включена по умолчанию. Так как «Founded» типа DateTime и не может быть принимать значение null, то и оно становится обязательным. Можно вручную изменить тип поля на DateTime? И тогда сообщение исчезнет.

alt text

Список записей

alt text

Удаление записи

Что делать, если SQL Express не установлен?

Если у вас не установлен SQL Express, то вы, скорее всего, получите следующую ошибку:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Blah blah blah…

Нет проблем! Ведь мы можем использовать SQL Server Compact – легкую СУБД без необходимости что-то устанавливать. Просто используя NuGet выполняем команду

Install-Package EFCodeFirst.SqlServerCompact

И база данных у нас в проекте! После перекомпиляции вы должны увидеть .sdf файл в папке ~/App_Data. Библиотека EFCodeFirst.SqlServerCompact добавит в проект файл AppStart_SQLCEEntityFramework.cs, который инкапсулирует логику взаимодействия с базой SQL CE.

Скаффолдим репозиторий

Если вы посмотрите на код, то увидите, что TeamController читает и пишет данные напрямую в SoccerSiteContext, что не есть хорошо. Для реальных сценариев нам понадобится репозиторий. Давайте его создадим.

Для этого добавим –Repository в нашей строке:

Scaffold Controller Team –Repository -Force

–Force нужен для того, чтобы перезаписать существующие файлы. После выполнения команды создастся дополнительный класс TeamRepository и интерфейс ITeamRepository

public interface ITeamRepository
{
    void Add(Team post);
    void Delete(int id);
    IEnumerable<Team> GetAllTeams();
    Team GetById(int id);
    void Save();
}

TeamController теперь работает с базой с помощью ITeamRepository.

Но это еще не все

Скаффолдинг можно применять не только для CRUD операций. Вы можете таким образом создавать любые типы приложений, используя пользовательские шаблоны. Об этом поговорим в следующий раз.


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

Комментарии

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