使用(流利)NHibernate与StructureMap(或任何IoCC)

时间:2008-12-20 16:08:13

标签: c# nhibernate fluent-nhibernate structuremap

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

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

我打算做的是......

  • 使用Fluent NHibernate创建用于NHibs配置的类映射
  • 实施ISession和ISessionFactory
  • 将我的ISessionFactory实例作为单例
  • 引导到StructureMap中
  • 使用StructureMap注册ISession,使用per-HttpRequest缓存

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

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

如果没有,我该怎么办?

由于

安德鲁

2 个答案:

答案 0 :(得分:4)

我在我当前的3个项目中使用了StructureMap和fluent-nhibernate(以及NH Validator)。其中2个是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”部分中如何注册会话工厂和ISession与StructureMap。

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

会话工厂是一个非常昂贵的对象,您只需初始化一次并在应用程序的生命周期内保持不变。

答案 1 :(得分:0)

我没有使用结构图,但也许我仍然可以帮助指导您正确的方向。流畅的nHibernate是hbm文件的绝佳选择。

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

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