由于LinqToSql不适合多对多关系,我正在决定转向NHibernate(Fluent NHibernate),除非另有说服力......
项目结构:UI(Minc2应用程序与Ninject连接所有服务到控制器,存储库连接到服务),DomainServiceLayer(所有util,帮助程序,服务,域模型等)和我的存储库层用于持久性。我有另一个项目调用模型,它基本上公开所有项目引用的实体。
基本上我在Repository Layer中创建了我的映射,引用了NHIbernate和Fluent NHIibernate,我希望将接口暴露给域服务以查询和保存数据。如何连接iSession,我在哪里接线?任何示例代码,我应该把它放在什么项目中?理想情况下,我希望将其保留在Repository Layer中......是否值得学习NHibernate并完成所有这些工作?
答案 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打开和关闭会话。