Backgroud: Я использую NHibernate для своего модельного уровня, и у меня есть HTTP-модуль, который заботится о создании экземпляра сеанса в начале каждого запроса и очистке его в конце каждого запроса (т.е. сеанс на запрос).В этом случае у меня есть два типа объектов:
ParentItem - объект с набором свойств и коллекцией ChildItems.
ChildItem - объект со свойствами, включая DateTime (EffectiveDate) и необязательный FK, указывающий на совершенно другую базу данных.Класс ChildItem также содержит ссылку на родителя (много-к-одному)
Несмотря на то, что ParentItem имеет несколько ChildItems в своей коллекции, меня интересует только последняя версия ChildItem вcollection.
Желание: Требуется элемент управления с привязкой к данным (GridView или ListView, мне все равно, какой), который позволяет мне добавлять / редактировать / удалять ParentItems из моего источника данных.Я также хочу иметь возможность установить новый «последний» ChildItem как часть редактирования / обновления.
Проблема: Мне не удается получить доступ к базовому DataItem из GridView/ ListView в обработчике OnItemUpdating (что не является неожиданным, поскольку данные теперь находятся в состоянии просмотра).То, что я мог сделать, это загрузить ParentItem из моего сеанса, используя идентификатор из элемента управления с привязкой к данным, создать новый ChildItem, добавить его в ParentItem и затем сохранить ParentItem.Так как NHibernate кэширует данные, загрузка должна дать мне копию из кэша (без обратной передачи в БД), и я бы либо делал это до того, как ParentItem был сохранен обратно (таким образом, никаких изменений, зафиксированных в ParentItem, только в ChildItem), либо после(таким образом, кэшированная версия остается прежней, и мой новый объект будет соответствовать обновленной версии).Что я получаю, когда делаю это (для ParentItemID = 1):
a different object with the same identifier value was already associated
with the session: 1, of entity: NameSpace.ParentItem
в строке:
Session.SaveOrUpdate(parentItemInstance);
Я предполагаю, что это связано с тем фактом, что мой ObjectDataSource загруженэтот ParentItem уже для того, чтобы обновить его, но я не уверен, куда идти отсюда.