У меня есть чертовски время, пытаясь выяснить мои проблемы с управлением сеансами в NHibernate. Я предполагаю, что большая часть моей проблемы связана с отсутствием знаний о концепциях IoC и AOP; по крайней мере, это то, о чем я думаю, где Фабио Моло продолжает руководить мной.
В любом случае, моя проблема в том, что у меня есть приложение форм выигрышей, которое делает "получить" вызовы и привязывает результат к сетке. После привязки пользователь может выполнить какое-то действие "написать", и это приведет к закрытию сеанса после записи в попытке использовать концепцию сеанса для использования. Затем пользователь может прокручивать сетку, которая вызывает ленивую загрузку, и теперь сеанс закрыт, и я получаю исключение.
Я не хочу, чтобы мой взгляд был посвящен моим сеансам, я не хочу отправлять KillAllSessions, когда пользователь закрывает форму. Кроме того, пользователь может иметь несколько форм, открытых в любой момент времени, дополнительно усугубляя проблемы, связанные с этим методом. Я по сути хочу, чтобы все это работало "за кулисами".
Итак, моя идея до сих пор заключается в том, чтобы перехватить ленивый запрос на загрузку и проверить, открыт ли сеанс, а если не открывать его повторно, получите информацию, а затем снова закройте ее. Однако, насколько я могу судить, что не так много, по сути, это то, как работает ленивая загрузка. Он перехватывается прокси factory (NHibernate.Bytecode.Castle), а затем извлекает данные с помощью сеанса. Поэтому мне нужно фактически перехватить этот вызов, а затем передать его первоначальному намеченному перехвату после повторного открытия сеанса. Так что это моя идея.
Мой вопрос в первую очередь заключается в том, что это даже правильный способ сделать это? Во-вторых, если я даже не знаю, с чего начать. Я никогда не перехватывал вызовы методов, я знал это теоретически, но не на практике. Я знаю, что есть библиотеки, которые делают такие вещи, как Rhino Commons, но я хочу воспользоваться этой возможностью, чтобы учиться и стать лучшим программистом. Я пытаюсь понять AOP и Context Bound Objects, но в настоящее время я не разбираюсь в нем. Могли бы некоторые из вас, пожалуйста, помочь парню?