asp.net-mvc – 在ASP.NET MVC中的NHibernate会话管理

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 在ASP.NET MVC中的NHibernate会话管理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@
我目前正在玩的HybridSessionBuilder类发现在Jeffrey Palermo的博客文章: @H_404_2@http://jeffreypalermo.com/blog/use-this-nhibernate-wrapper-to-keep-your-repository-classes-simple/

@H_404_2@使用这个类,我的存储库看起来像这样:

  1. public class UserRepository : IUserRepository
  2. {
  3. private readonly ISessionBuilder _sessionBuilder;
  4.  
  5. public UserRepository(ISessionBuilder sessionBuilder)
  6. {
  7. _sessionBuilder = sessionBuilder;
  8. }
  9.  
  10. public User GetByID(string userID)
  11. {
  12. using (ISession session = _sessionBuilder.GetSession())
  13. {
  14. return session.Get<User>(userID);
  15. }
  16. }
  17. }
@H_404_2@这是管理NHibernate会话/工厂的最好方法吗?我听说过关于工作单元的事情,并为每个Web请求创建一个会话,并在最后刷新它。从我可以告诉,我目前的实现不是做任何这些。它基本上依赖于Repository从会话工厂获取会话,并使用它来运行查询

@H_404_2@这样做数据库访问有任何陷阱吗?

@R_404_323@

你不应该将你的ISession包装在using语句中 – 将ISessionBuilder传递给库构造函数(依赖注入)的意义是调用代码负责控制ISession的生命周期。通过将它包装在一个使用中,Dispose()在ISession上被调用,你将不能延迟加载对象成员或持久化它。 @H_404_2@我们通过将一个ISession传递给存储库构造函数来做类似的事情。巴勒莫的代码,我理解它,只是增加了惰性初始化的ISession。我不认为这是必要的,因为如果你不打算使用它,为什么你会新建一个存储库?

猜你在找的asp.Net相关文章