Я хочу поделиться тем, что я сделал, чтобы сделать эту работу, потому что «официальная» поддержка этого сценария была ... скажем так, в лучшем случае бесполезной, а в худшем - грубой.
Кстати, у вас была та же идея, что и у меня: заставить внешний ключ не вставлять / обновлять. НО, я также сделал это Generated.Always (). таким образом он всегда будет читать значение обратно.
Дополнительно я переопределяю DomainService.Submit () и DomainService.ExecuteChangeSet (). Я запускаю транзакцию NHibernate в Подтверждении (хотя я еще не уверен, что это делает то, что я ожидаю).
Вместо того, чтобы помещать мою логику сохранения в методы InsertSomeEntity () или UpdateSomeEntity (), я делаю все это внутри ExecuteChangeSet. это происходит из-за NHibernate, и его НУЖНО иметь граф сущностей полностью двунаправленный и гидратированный до выполнения действий в NHibernate. Это включает в себя загрузку сущностей из базы данных или сеанса, когда дочерний элемент попадает на связь из служб RIA. (Я пошел по пути написания методов, чтобы получить различные другие части графика, так как эти специализированные методы нуждались в них, но я обнаружил, что проще сделать все это одним методом. Более того, я столкнулся с проблемой желания RIA сначала выполнить вставку / обновление для дочерних объектов, что для новых элементов является проблемой.)
Я хочу прокомментировать атрибут композиции. Я все еще поддерживаю мой предыдущий комментарий о том, что не рекомендую его для стандартных дочерних коллекций сущностей, ОДНАКО, он работает БОЛЬШОЙ для поддержки компонентов NHibernate, потому что в противном случае RIA никогда не отправит обратно родительский экземпляр (композиции), который требуется для работы NHibernate. правый.
Я не предоставил здесь никакого кода, потому что мне нужно было бы сделать некоторые серьезные изменения, но для меня это не проблема, если вы хотите его увидеть.