在存储库层中使用Fluent NHibernate进行Ninject

时间:2011-01-30 23:59:11

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

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

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

基本上我在Repository Layer中创建了我的映射,引用了NHIbernate和Fluent NHIibernate,我希望将接口暴露给域服务以查询和保存数据。如何连接iSession,我在哪里接线?任何示例代码,我应该把它放在什么项目中?理想情况下,我希望将其保留在Repository Layer中......是否值得学习NHibernate并完成所有这些工作?

3 个答案:

答案 0 :(得分:6)

我建议查看Bob的博文。他详细描述了如何使用NHibernate在Ninject中使用存储库模式。我计划在不久的将来在示例应用程序中添加一个与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/

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

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

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