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 });
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);
DynamicDataModelBinder(ModelBinders.Binders.DefaultBinder);
Связывание данных — механизм создания объекта и инициализации его свойств по словарю. Обычно это словарь POST или GET запроса.
На этом этапе обычное DynamicData приложение для веб-форм уже вовсю работает, но в нашем случае не всё так гладко. У нас пока нет шаблона проекта DynamicData для MVC, поэтому нет и соответсвующих контроллеров и представений. Есть только динамическая модель, а также парочка partial view, которые мы спёрли с BlogSample. В следующий раз попробуем создать обобщённый контроллер для списков сущностей.
Вы можете скачать исходный код.

No comments:
Post a Comment