5

在我学习 NHibernate 的过程中,我遇到了下一个障碍;我应该如何将它与 StructureMap 集成?

尽管代码示例非常受欢迎,但我对一般过程更感兴趣。

我本来打算做的是...

  • 使用 Fluent NHibernate 创建我的类映射以在 NHibers 配置中使用
  • 实现 ISession 和 ISessionFactory
  • 将我的 ISessionFactory 实例作为单例引导到 StructureMap 中
  • 使用 StructureMap 注册 ISession,并使用每个 HttpRequest 缓存

但是,我不需要在 HttpRequest 结束时在我的会话实例上调用各种整理方法吗(因为那是它生命的尽头)?

如果我在 Dispose() 中进行整理,structuremap 会为我解决这个问题吗?

如果没有,我该怎么办?

谢谢

安德鲁

4

2 回答 2

4

我在我当前的 3 个项目中使用带有 fluent-nhibernate(和 NH Validator)的 StructureMap。其中两个是 ASP MVC 应用程序,第三个是 WCF Web 服务。

您的一般策略听起来是正确的(除非您不会制作自己的 Session 或 SessionFactory,正如评论中已经指出的那样)。有关详细信息,请从此处获取我的配置代码:

http://brendanjerwin.github.com/development/dotnet/2009/03/11/using-nhibernate-validator-with-fluent-nhibernate.html

这篇文章实际上是关于集成 NH Validator 和 Fluent-NHibernate,但您可以在文章的“Bonus”部分准确了解我如何使用 StructureMap 注册会话工厂和 ISession。

RE:整理:您应该尝试并始终在事务中工作,并在工作单元结束时提交或回滚事务。NH 仅在需要 SQL 连接时才使用它们,并会为您清理有限的资源。正常的垃圾收集将自己处理您的会话。

Session Factory 是一个非常昂贵的对象,您只希望初始化一次并在应用程序的整个生命周期中保留它。

于 2009-03-27T02:00:53.657 回答
0

我没有使用结构图,但也许我仍然可以帮助引导您朝着正确的方向前进。Fluent nHibernate 是 hbm 文件的不错选择。

对于 http 请求,不需要确保在 http 请求结束时关闭会话。如果你不这样做,你最终会泄漏 nHibernate 会话。我不确定结构映射是否会为您处理这个问题,我所做的是我有一个关闭会话的 http 模块。

有一点需要注意,虽然这让我很生气,但您将确保将所有数据访问包装在事务中,并确保 nHibernate 实际提交其更改。如果您在会话关闭期间执行此操作,您可能会错过处理错误的机会。我很想知道你最终必须做些什么来完成这项工作。

于 2008-12-21T19:09:45.680 回答