NHibernate会议:有多少?何时创建?什么时候关门?
我在这里真的很挣扎。我试图使我的DAL程序集非常通用,以便它在webcontext、WCF和WinForms/WPF中工作。我的问题是会议 延迟加载很好,这是我真正想要的,但是在您加载对象的会话结束后,您就不能再延迟加载了。这对我来说是个大问题,因为我不知道应该在哪个范围内开始/结束会话 我见过很多人在HttpContext.Begin和End.End上启动它们,但这对我来说是不可行的,因为我不希望我的程序集链接到System.Web或绑定到HttpContext中调用 另一种选择是在整个DAL组件生命周期中只保留一个会话。这种方法有哪些优点和缺点?该程序集主要用作网站中的后端,但也用于WinForms应用程序 有人吗?:) [编辑]NHibernate会议:有多少?何时创建?什么时候关门?,nhibernate,session,Nhibernate,Session,我在这里真的很挣扎。我试图使我的DAL程序集非常通用,以便它在webcontext、WCF和WinForms/WPF中工作。我的问题是会议 延迟加载很好,这是我真正想要的,但是在您加载对象的会话结束后,您就不能再延迟加载了。这对我来说是个大问题,因为我不知道应该在哪个范围内开始/结束会话 我见过很多人在HttpContext.Begin和End.End上启动它们,但这对我来说是不可行的,因为我不希望我的程序集链接到System.Web或绑定到HttpContext中调用 另一种选择是在整个DAL
我的另一个选择是编写自己的延迟加载代理集合,这反过来将打开一个新会话并获取集合应该包含的任何数据。对这种方法有何评论?在我们的系统中,我们有工作单元的概念。对我们来说,一个工作单元是针对系统的单一操作。例如,从一个账户取钱或将钱存入一个账户将是一个单一的工作单元 工作单元类包装NHibernate会话(以及其他一些东西),然后我们的存储库根据当前工作单元工作(通过线程存储) 就你想做的事而言,我们会做以下的
- 对于WCF,我们有一个UnitOfWorkContext属性,用于负责开始/结束工作单元的操作
- 对于WinForms,我们只需要演示者开始/结束一个工作单元
- 对于WebContext,我们将在HttpContext.Begin和.End中执行相同的操作