Службы данных WCF Как добавить Business Logic или использовать существующие объекты CSLA - PullRequest
1 голос
/ 23 июня 2010

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

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

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

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

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

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

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

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

Заранее спасибо,

Дейв

1 Ответ

1 голос
/ 23 июня 2010

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

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

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

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

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

...