Как вызвать операции, отличные от CRUD, в RIA Domain Service? - PullRequest
1 голос
/ 09 февраля 2010

У меня возникли проблемы с тем, как понять, как реализовать более сложные операции в доменной службе в 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 так прямо, как я первоначально думал ... Также я подозреваю / надеюсь, что я неправильно понял некоторые аспекты механизма доменной службы, который привел меня к текущей ситуации.

Один путь?

Записав это в таком вопросе, я думаю, что, возможно, я бы пошел в этом направлении:

  1. LegacyModelService предоставляет операции CRUD, как я уже сделал.
  2. Разобрать громоздкие операции в другом сервисе. Должен ли я сделать это RIA Doamin Service или просто WCF?
  3. Получите доступ к модели Entity Framework из нового сервиса UnwieldyOperationsService и управляйте там уровнем данных.
  4. Явно перезагрузите или обновите контекст клиентского домена для LegacyModelService на клиенте, чтобы отразить изменения, которые могли произойти из UnwieldyOperation. Что было бы хорошим способом сделать это?

1 Ответ

1 голос
/ 16 февраля 2010

Проверьте http://msdn.microsoft.com/en-us/library/ee707373%28VS.91%29.aspx для соглашений по именованию сверх простого CRUD, может быть, подойдут операции Invoke или Named Update?

...