Как каскадно выселить объект из сеанса через Fluent NHibernate - PullRequest
0 голосов
/ 15 марта 2011

У меня есть вложенный объект (объект с подобъектами), который я хотел бы получить из репозитория, связанного с активным сеансом, из одной базы данных, удалить его и сохранить в другой базе данных (другой сеанс, другая строка подключения Разное хранилище). Я пробовал:

myISession.Evict(myObjectInstance);

Моя MappingConfiguration имеет

Conventions.Add(DefaultCascade.All())

для всех типов.

Но я все еще получаю «NHibernate.HibernateException: незаконная попытка связать коллекцию с двумя открытыми сессиями». Как я могу удалить связь с исходным сеансом?

1 Ответ

2 голосов
/ 15 марта 2011

ОК, оказывается, мой объект, в этом случае myObjectInstance был составлен из объектов из двух разных сессий, давайте назовем их A и B. myObjectInstance имел свойства myProp1 из сеанса A и myProp2 из сеанса B. Я тогда должен был хранитьвесь myObjectInstance в сеансе B.

К сожалению, я пытался исключить myObjectInstance из сеанса A, а не просто myProp1.

Решение было:

NHibernateUtil.Initialize(myObjectInstance.myProp1); //eager load object being evicted.
_dataSession.Evict(myObjectInstance.myProp1);
MyObjectRepository.Save(myObjectInstance);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...