【问题标题】:using (Fluent) NHibernate with StructureMap (or any IoCC)使用(流利的)NHibernate 和 StructureMap(或任何 IoCC)
【发布时间】:2010-09-27 20:39:12
【问题描述】:

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

虽然代码示例很受欢迎,但我对一般程序更感兴趣。

我本来打算做的是……

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

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

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

如果没有,我该怎么办?

谢谢

安德鲁

【问题讨论】:

  • 在第二点中,您提到了实现 ISessionFactory 和 ISession。你不想自己实现这些。您可能想要实现某种“管理器”,可以让您访问 ISessionFactory 并打开/关闭会话。
  • 那么它们是否已经在 NHib 中实现了?它们在什么命名空间中?
  • 它们在 NHibernate.Impl 命名空间中,但您可以通过 Configuration.BuildSessionFactory() 和 ISessionFactory.OpenSession() 访问它们。

标签: c# nhibernate fluent-nhibernate structuremap


【解决方案1】:

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

您的总体策略听起来很正确(除非您不会创建自己的 Session 或 SessionFactory,正如 cmets 中已经指出的那样)。有关详细信息,请从此处获取我的配置代码:

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 连接时才使用它们,并会为您清理有限的资源。正常的垃圾收集将自己处理您的会话。

会话工厂是一个非常昂贵的对象,您只需初始化一次并在应用的整个生命周期中保留它。

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    相关资源
    最近更新 更多