在我学习NHibernate的过程中,我已经达到了下一个障碍;我应该如何将它与StructureMap集成?
尽管代码示例非常受欢迎,但我对一般过程更感兴趣。
我打算做的是......
但是,我不需要在HttpRequest结束时在我的会话实例上调用各种整理方法(因为这就是生命的结束)?
如果我在Dispose()中进行整理,那么structuremap会为我解决这个问题吗?
如果没有,我该怎么办?
由于
安德鲁
答案 0 :(得分:4)
我在我当前的3个项目中使用了StructureMap和fluent-nhibernate(以及NH Validator)。其中2个是ASP MVC应用程序,第三个是WCF Web服务。
您的一般策略听起来是正确的(除非您不会制作自己的Session或SessionFactory,正如评论中已经指出的那样)。有关详细信息,请从此处获取配置代码:
帖子实际上是关于集成NH Validator和Fluent-NHibernate,但你可以看到我在帖子的“Bonus”部分中如何注册会话工厂和ISession与StructureMap。
RE:整理:您应该尝试并始终在事务中工作,并在工作单元结束时提交或回滚事务。 NH仅在需要时使用SQL Connections,并将为您清理有限的资源。正常的垃圾收集将自己处理您的会话。
会话工厂是一个非常昂贵的对象,您只需初始化一次并在应用程序的生命周期内保持不变。
答案 1 :(得分:0)
我没有使用结构图,但也许我仍然可以帮助指导您正确的方向。流畅的nHibernate是hbm文件的绝佳选择。
对于http请求,您无需确保在http请求结束时关闭会话。如果你不这样做,你最终会泄漏nHibernate会话。我不确定结构图是否会为你处理这个,我所做的是我有一个关闭会话的http模块。
有一点需要注意的是,虽然咬我,但是你会确保在事务中包装所有数据访问并确保nHibernate实际提交其更改。如果您在会话结束时执行此操作,则可能会错过处理错误的机会。我很想知道你最终必须做些什么来完成这项工作。