У меня возникли проблемы с тем, как понять, как реализовать более сложные операции в доменной службе в RIA Services. Это все Silverlight 4, VS 2010 и .Net Framework 4 в бета-версии 2.
Цель
Хотелось бы создать на моем LinqToEntitiesDomainService операцию, которая бы имела подпись примерно так:
public UnwieldyOperationResult PerformUnwieldyOperation( UnwieldyOperationParameters p );
Идея состоит в том, что эта операция принимает набор параметров и выполняет довольно сложные операции, которые обновляют различные экземпляры и типы объектов, которыми в противном случае манипулируют с помощью функции CRUD DomainService.
Задача
Непосредственная проблема, с которой я столкнулся, заключается в том, что, похоже, не разрешено передавать пользовательский тип в качестве параметра методу, и я предполагаю, что что-то в этих строках идет для возвращаемого значения. Я хочу инкапсулировать параметры операции в DTO для ясности, и эта громоздкая операция не имеет какой-либо соответствующей сущности в устаревшей базе данных, которую я обернул моделью Entity Framework 4.0, на которой я в свою очередь основываю доменную службу.
Предполагается ли, что доменная служба работает только с типами, являющимися объектами в базовой модели EF? Разве он не предназначен для предоставления более сложных операций, таких как моя UnwieldyOperation?
Если это так, могу ли я каким-либо образом создать другую службу, которая позволит как подписи операции, так и манипулировать структурой сущностей?
Я понял, что только одна Доменная служба может обрабатывать сущность из модели. Это заставило меня собрать все CRUD, а теперь и UnwieldyOperation в одну доменную службу, хотя моей первой идеей было разделить службу на более мелкие части.
Если бы я заставил операцию работать с параметрами и возвращаемым значением в доменной службе, моим следующим желанием было бы обновить сущности, уже загруженные в контексте домена на клиенте.
Есть ли эффективный механизм для такой вещи?
Как вы собираетесь это сделать?
Что у меня пока ...
Короче, вот что у меня так далеко:
Я обернул существующую унаследованную базу данных
с моделью Entity Framework 4.0 с как
немного больше дополнения / код как
возможный. Это означает, щелкните правой кнопкой мыши, добавить и создать из базы данных.
Я реализовал более простые операции CRUD в DomainService и успешно их использую для отображения и редактирования прямых данных. У меня есть некоторая инкапсуляция логики через ViewModels в клиенте, но я выставляю классы Entity напрямую, но я думаю, что это не связано с моей проблемой / вопросом.
Я понял, что не могу добавить UnwieldyOperation так прямо, как я первоначально думал ... Также я подозреваю / надеюсь, что я неправильно понял некоторые аспекты механизма доменной службы, который привел меня к текущей ситуации.
Один путь?
Записав это в таком вопросе, я думаю, что, возможно, я бы пошел в этом направлении:
- LegacyModelService предоставляет операции CRUD, как я уже сделал.
- Разобрать громоздкие операции в другом сервисе. Должен ли я сделать это RIA Doamin Service или просто WCF?
- Получите доступ к модели Entity Framework из нового сервиса UnwieldyOperationsService и управляйте там уровнем данных.
- Явно перезагрузите или обновите контекст клиентского домена для LegacyModelService на клиенте, чтобы отразить изменения, которые могли произойти из UnwieldyOperation. Что было бы хорошим способом сделать это?