【问题标题】:Ninject with Fluent NHibernate within the Repository Layer在存储库层中使用 Fluent NHibernate 进行 Ninject
【发布时间】:2011-06-18 07:16:09
【问题描述】:

由于 LinqToSql 不适合多对多关系我正在决定迁移到 NHibernate (Fluent NHibernate),除非另有说服力...

项目结构:UI(带有 Ninject 的 Mvc2 应用程序将所有服务连接到控制器,将存储库连接到服务)、DomainServiceLayer(所有实用程序、帮助程序、服务、域模型等)和我的存储库层用于持久性。我有另一个名为 Model 的项目,它基本上公开了所有项目都引用的实体。

基本上,我在存储库层中创建我的映射,并引用 NHIbernate 和 Fluent NHIibernate,我希望将接口公开给域服务以查询和持久化数据。如何连接 iSession,在哪里连接?任何示例代码,我应该把它放在什么项目中?理想情况下,我想将其保留在存储库层中……值得学习 NHibernate 并经历所有这些吗?

【问题讨论】:

  • 我真的不想连接sharparchitecture,我的大部分项目都已经到位,而且我对我已经拥有的控制水平感到满意。我只想在存储库层中添加 NHibernate 3.0,而不是弄乱我的整个 Asp.net MVC UI 项目。
  • 对,但您可以从那里学习和获取代码。

标签: nhibernate asp.net-mvc-2 fluent-nhibernate ninject


【解决方案1】:

我建议查看 Bob 的博客文章。他详细描述了如何在 Ninject 中使用 NHibernate 使用存储库模式。我计划在不久的将来向带有 MVC 扩展的示例应用程序添加一个示例,因为这个问题一次又一次地出现。

http://blog.bobcravens.com/2010/06/the-repository-pattern-with-linq-to-fluent-nhibernate-and-mysql/

http://blog.bobcravens.com/2010/07/using-nhibernate-in-asp-net-mvc/

http://blog.bobcravens.com/2010/09/the-repository-pattern-part-2/

【讨论】:

  • 看起来很不错!你差点赢得我的选票,我需要仔细看一遍才接受!
【解决方案2】:

通常我有一个 NHibernateSessionFactory,它是一个具有 OpenSession 方法的单例,我通常像这样绑定 ISession。

Bind<ISession>().ToMethod(context => 
NHibernateSessionFactory.Instance.OpenSession()).InRequestScope();

这个方法只是调用ISessionFactory.OpenSession 您可以将其放入存储库层中的 NinjectModule 中,您的应用可以在创建内核时加载它。

【讨论】:

  • 假设我有一个存储库层,一个与我的应用程序的其余部分分开的项目,理想情况下,我会将 ISession 注入存储库类并使用会话来履行其职责。这是否意味着我仍然需要在 Global.asax 中连接任何东西?
  • @Haroon 是的,因为您需要创建 NInjnect 内核并在 Application_Start 上加载所有模块
【解决方案3】:

我在应用层(即顶层)进行配置,因为应用之间的配置不同。但是将一些配置分解为存储在存储库层中的类会很有用。

我使用 HttpModule 打开和关闭会话。

【讨论】:

  • 您能否给我一个编码示例或指出正确的方向?您是否将 NHibernate 暴露给您的 Web 应用程序?
  • NHibernate 有点暴露给我的网络应用程序,是的。查看 Sharp Architecture 或阅读 Sanderson 的“Pro Asp.NET MVC Framework”之类的好书
  • Pro Asp.net MVC 框架很遗憾没有涵盖这一点,我已经有了这本书。它简要讨论了域层,但没有详细介绍。我可以在我的存储库层中公开一个 ISession 并通过 DI 干净地连接所有内容,但我需要设置诸如 Transactional 之类的过滤器,我认为我的 Global.asax 也需要处理一些事件......试图弄清楚它们是如何连接的起来..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多