ASP.NET MVC 3 Scaffolding с помощью библиотеки MvcScaffolding
Одним из нововведений последнего обновления 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
Полная версия:
- Необходимо установить ASP.NET MVC 3 Update вместе с последней версией NuGet.
- Открыть или создать новый ASP.NET MVC 3 проект.
- Установить библиотеку MvcScaffolding. Для этого необходимо в командной строке Package Manager Console ввести
Install-Package MvcScaffolding
Кроме, собственно, 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
Как вы можете видеть, создался контроллер, database context и все views для CRUD операций. Если вы запустите проект, то EFCodeFirst автоматически подсоединится к базе данных, создаст схему на базе нашей модели и создаст простой интерфейс для работы с моделью.
Убедиться в этом можно введя в адресную строку адрес http://…/team:
В данный момент база пустая.
Создание новой записи. Проверка вводимых значений включена по умолчанию. Так как «Founded» типа DateTime и не может быть принимать значение null, то и оно становится обязательным. Можно вручную изменить тип поля на DateTime? И тогда сообщение исчезнет.
Список записей
Удаление записи
Что делать, если 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 операций. Вы можете таким образом создавать любые типы приложений, используя пользовательские шаблоны. Об этом поговорим в следующий раз.