Сервисы RIA и nHibernate вставьте новую проблему - PullRequest
3 голосов
/ 19 января 2011

У меня есть комбинация сервисов RIA и nHibernate. nHibernate настроен на использование идентификатора на стороне базы данных. Таким образом, новые сущности отправляются с 0 для идентификатора. nHibernate работает как надо. Он обновляет сгенерированные ключи из базы данных и обновляет сайты.

У меня есть пример с композиционной иерархией. Моя сущность сложна, у нее есть две коллекции.

InvestObject 
 - MaterialItems
 - WorkItems

Я работаю с этой структурой в одной единице работы. Получение и отображение данных в приложении Silverlight - это не проблема. Но если я пытаюсь добавить более одного элемента в коллекцию MaterialItems на стороне клиента, при сохранении я получаю эту ошибку:

Операция отправки не удалась. Недействительным ChangeSet: только одна запись для данного Экземпляр сущности может существовать в Изменения. в System.ServiceModel.DomainServices.Server.ChangeSet.ValidateChangeSetEntries (IEnumerable 1 changeSetEntries) at System.ServiceModel.DomainServices.Server.ChangeSet..ctor(IEnumerable 1 changeSetEntries)

Существует быстрое исправление на стороне клиента, просто для создания фиктивных отрицательных идентификаторов для Материала. Это работает для RIA и сохранение распространяется на стороне сервера. Но тогда nHibernate запускает ошибку, потому что ожидает 0 для всех новых идентификаторов, а не для заданного значения (). Так что это не хорошо.

Наконец, я обманул nHibernate, сбросив все новые идентификаторы на 0. Но это не делает меня счастливым. Это грязное уродливое решение.

Пожалуйста, помогите

1 Ответ

0 голосов
/ 19 октября 2011

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

...