Tuesday, April 27, 2010

Создаём ASP.NET Dynamic Data MVC проект

Что ж, пришло время чего-нибудь накодить. Да, к сожалению, в случае с DynamicData для MVC не получится написать три строчки кода, сделать 10 кликов мышью, чтобы получить работающее приложение. Придётся кодить и, судя по всему, много.

1. Будем разрабатывать приложение для управления данными в многострадальной тестовой базе данных компании Northwind, схема которой легко гуглится по запросу «Northwind database» и качается с сайта Microsoft.

2. Создаём ASP.NET MVC2 веб-проект, без юнит-тестирования.

3. Копируем в App_Data файлы базы данных Northwind: NORTHWND.LDF и NORTHWND.MDF (после установки, эти файлы могут быть найдены в C:/SQL Server 2000 Sample Databases/)

4. Открываем скаченный с codeplex'a ASP.NET Dynamic Data MVC Preview, /samples/Blog и копируем к себе папки и файлы, лежащие в них:
  • ~/Views/Shared/EntityTemplates/ — всю папку в соответсвуюющее место
  • ~/Views/Shared/FieldTemplates/ — всю папку
  • ~/Views/Shared/ValidationSummary.ascx — весь файл :)
Далее необязательные:
  • ~/Content/DynamicData/
  • ~/Extensions/ — кроме UrlHelperExtensions.cs — напишем свои :)
  • ~/Utility/

5. Добавляем референсы на System.Web.DynamicData, a также на скомпилированный нами в позапрошлом посте Microsoft.Web.DynamicData.Mvc.dll.

6. Пробуем всё скомпилировать просто так и посмотреть всё ли хорошо. Всё должно быть хорошо. Если не хорошо, то плохо.

7. Создаём модель. Кликаем правой клавишей мыши по корню проекта в Solution Explorer, выбираем Add new item > LINQ to SQL Classes. Назовём его Northwind. Перетаскиваем все таблицы на поле появившегося Object Relational Designer. Для этого надо кликнуть правой клавишей мыши по NORTHWND.MDF и выбрать Open, а затем найти в появившемся Server Explorer найти все таблицы. Вот, что у нас получится:


Последним действием мы автоматически сгенерировали NorthwindDataContext, включающий в себя классы объектной модели нашей предметной области: по классу на таблицу.

8. Создадим мета-модель. Для этого необходимо в Global.asax создать объект класса MetaModel. В Application_Start() пишем:

var model = new MetaModel();
model.DynamicDataFolderVirtualPath = "~/Views/Shared";
model.RegisterContext(typeof(NorthwindDataContext),
      new ContextConfiguration { ScaffoldAllTables = true });

Казалось бы, а куда мета-модель после этого денется, а никуда не денется. Созданный объект будет доступен через статическое свойство MetaModel.Default. Через NorthwindDataContext мы связали мета-модель с моделью, которая была сгенерирована автоматически на предыдущем шаге. Также мы разрешили скафолдить в ней все таблицы.

9. Зарегистрируем DynamicDataModelBinder в качестве стандартного связывальщика данных нашего приложения. Написав следующую строчку, после создания мета-модели:

ModelBinders.Binders.DefaultBinder = new
DynamicDataModelBinder(ModelBinders.Binders.DefaultBinder);

Связывание данных — механизм создания объекта и инициализации его свойств по словарю. Обычно это словарь POST или GET запроса.

На этом этапе обычное DynamicData приложение для веб-форм уже вовсю работает, но в нашем случае не всё так гладко. У нас пока нет шаблона проекта DynamicData для MVC, поэтому нет и соответсвующих контроллеров и представений. Есть только динамическая модель, а также парочка partial view, которые мы спёрли с BlogSample. В следующий раз попробуем создать обобщённый контроллер для списков сущностей.

Вы можете скачать исходный код.

No comments:

Post a Comment