Службы данных WCF: обработка объекта во время сохранения - PullRequest
1 голос
/ 05 января 2011

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

Мы преобразовываемся из обычной Entity Framework в службы данных, и мы создали сборку, которая содержит сгенерированные объекты клиента, которые взаимодействуют со службой данных.(через сервисный справочник).Эти классы являются частичными, поэтому мы добавили к ним некоторую логику и расширенные свойства.Все это прекрасно работает.

Проблема, с которой мы сталкиваемся, заключается в том, что нам нужно обрабатывать наши объекты во время экономии, поскольку им необходимо выполнить некоторую расширенную сериализацию, прежде чем они будут отправлены по проводам.Класс DataServiceContext содержит два события: WritingEntity и ReadingEntity.Событие ReadingEntity в действительности происходит в правильное для нас время (десериализация после объекта).Событие WritingEntity происходит во время НЕПРАВИЛЬНО для нас (после сериализации объекта).

Есть ли способ перехватить объект до того, как он будет записан в запрос, чтобы мы могли вызвать метод для объекта, который собираетсябыть написанным?

Очевидно, что мы могли бы просто пройтись по списку сущностей, отыскивая любую сущность, которая не находится в состоянии «Не изменен» или «Удален», и вызвать там соответствующий метод ... но это потребовало бы от меня добавленияспециальный код каждый раз, когда я хотел вызвать SaveChanges в контексте.Это может быть то, что нам нужно сделать, но было бы неплохо, если бы был способ перехватить сущности до того, как они будут записаны в XML для отправки в службу.

1 Ответ

0 голосов
/ 06 января 2011

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

...