2010-06-23 6 views
1

Прежде всего, это мой первый вопрос о переполнении стека, поэтому приносим извинения заранее, если я ошибаюсь!WCF Data Services Как добавить бизнес-логику или использовать существующие объекты CSLA

Я работаю над созданием конечной точки службы для базы данных CRM, используемой внутри. Некоторые приложения хотят читать и записывать в эту базу данных, поэтому разоблачение службы WCF представляется наилучшим подходом.

Я начал использовать платформу Entity Framework для ORM, CSLA для уровня бизнес-логики и стандартную службу WCF для связи с клиентскими приложениями. Все шло хорошо, пока я не взглянул на службы данных WCF и не соблазнился прекрасным интерфейсом REST, простотой потребления клиентами AJAX и радостью использования новых технологий!

Теперь я заменил большие части служб WCF единой службой данных WCF, которая напрямую подвергает модель Entity Framework, минуя уровень CSLA. Это отлично работает для операций только для чтения, но я не могу выполнять другие функции CRUD без какой-либо бизнес-логики.

Я занимаюсь перехватчиками, и я могу, конечно, поместить в него бизнес-логин, но я действительно хочу перехватить операцию POST/Add, сопоставить значения с соответствующим классом CSLA BusinessBase, и пусть это сделает всю проверку и окончательное сохранение в базе данных. Я пробовал это, и пока объект CSLA работает по назначению, базовая инфраструктура службы данных WCF также сохраняет свою версию, поэтому я получаю две записи в db.

поэтому у меня есть несколько вопросов:

1) Могу ли я полностью перехватывают запрос на изменение, пусть мои собственные бизнес-объекты ручки тогда отменить службы данных WCF, не бросать исключение?

2) Есть ли лучший/стандартный подход к добавлению слоев бизнес-логики в стек службы данных WCF? Я пока не смог найти его.

Спасибо заранее,

Dave

ответ

1

К сожалению, если основной поставщик служб данных WCF является Entity Framework, вы не можете делать все это самостоятельно. В настоящее время мы не поддерживаем полностью замену частей трубопровода обработки в этом случае.

С другой стороны, вы могли бы сыграть некоторые трюки. Вы можете сделать это в основном на основе сущности. Последняя версия EF должна позволить вам переопределить вызов SaveChanges, чтобы вы могли делать все, что хотите. Таким образом, идея заключается в том, что вы вручную обрабатываете операцию Add в своем change itnerceptor, а затем в SaveChanges вы возвращаете изменение, созданное службами данных WCF, и отправляете изменения только с вашего перехватчика изменений. Или, может быть, даже лучше, просто сделайте все в SaveChanges.

Могут быть другие интересные трюки с EF, которые службы WCF Data Services могут использовать без знания, но я не эксперт EF, чтобы точно сказать.

В настоящее время перехватчики являются стандартным способом объединения бизнес-логики в службы данных WCF (которая работает для любого поставщика, включая EF).

Другой способ сделать это - немного отойти от REST. Вы можете запретить POST-запросы к данному набору сущностей (вы можете выбросить из своего перехватчика изменений) и добавить операцию обслуживания для выполнения добавления в свой собственный код. В этом случае у вас будет полный контроль, но клиентам будет немного сложнее работать.