воскресенье, 13 января 2013 г.

WCF RIA Services + M2M templates

Месяц назад Jeff Handley выложил обновлённые RIA сервисы, которые мы ждали уже больше года.
Мы уж и не надеялись и начали экспериментировать с WCF Data Services, и даже выпустили работоспособный проект ;)
DS конечно лёгкие, но клиентская часть уж очень ущербная. Из функционала не хватает EF-подобных ChangeTracker'a и локального кэша. Мешают постоянные кросс-треды при совмещении async загрузки и DependencyProperty.
Мой проект DSCE заглох в связи с поздним стартом, т.е. набралось критическое количество костылей, из-за чего перелопачивание кода становится слишком дорогим. К тому же есть чувство, что здесь придётся посягать на основы сущего - материализацию, т.е. делать велосипед с нуля.

И вот тут долгожданное обновление RIA сервисов!
После НГ собрался и попробовал. DomainService генерить непонятно откуда, T4RIA.tt естественно не завёлся. Что делать? Писать самому конечно.
Заодно решил прикрутить M2M4RIA, который уже давно в бэклоге висел.
В процессе работы выяснились интересные моменты, как-то:
1) для кастомных server-side свойств надо теперь писать Exclude, а то они прокидываются;
2) для derived типов теперь требуется писать KnownType;
3) "паразитные" M2M сущности видны на клиенте;
4) в инструкции по M2M не написано, что для LinkTable views надо писать Include;
В результате получилось 2 шаблона:
1) Генератор метаданных. Если в названии есть модель, то даже генерится автоматически при сохранении модели.
2) Генератор сервисов.

Шаблончики простенькие, в них нет поддержки ComplexTypes и Functions, потому что в наших модельках их не встретилось ;)
Бонусом получилось избавление от зависимости на T4Toolbox.

upd 1/21 В ходе тестирования слегка поменял реализацию Delete/Update.
upd 2/4 Дополнительные проверки в генераторе сервисов.