Как я могу обновить свои сущности с помощью набора изменений json? - PullRequest
0 голосов
/ 02 ноября 2011

Учитывая оптимистический параллелизм с использованием свойства version и службы отдыха json с клиентом, который возвращает наборы изменений, состоящие только из Id, Version и измененных свойств, как я могу обновить свой объект на стороне сервера?

Я хотел десериализовать мой json в отсоединенную сущность, а затем использовать метод ISession.Merge для обновления моей сущности. Тем не менее, моя отдельная сущность будет иметь нулевые значения для многих свойств, и моя сущность будет обновлена ​​со всеми этими, если я вызову слияние, а это не то, что я хочу. Если есть способ указать слиянию игнорировать свойства, которые имеют значение NULL, и сохранить все соответствующие ненулевые значения от существующей сущности, которая решит мою проблему.

Если нет способа настроить поведение для слияния, я, конечно, мог бы получить постоянную сущность и реализовать свой собственный метод слияния, используя отражение. Проблема этого подхода состоит в том, что он требует, чтобы я сначала запросил в БД сущность, а затем обновил ее, тогда как метод слияния должен делать это как одну операцию, если я не ошибаюсь.

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

Если вы не сможете сделать это в рамках nhibernate, как бы вы поступили?

1 Ответ

0 голосов
/ 24 ноября 2011

В итоге я использовал WCF Web API для своего приложения.Я использую пользовательский медиа форматер, упаковывающий Json.NET.Это позволяет мне десериализовать в дженерики и производные типы, что довольно здорово и очень полезно.

У меня есть ChangeSet объект, который имеет несколько свойств, наиболее важным из которых является словарь «имя-значение».С помощью этой настройки я мог определить сервисные операции, берущие ChangeSet объектов.Однако мне пришлось явно удалить XmlMediaFormatter.Он выдавал ошибки, так как не мог десериализовать такие сложные объекты.

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

Работает прекрасно, если я честен.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...