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

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

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

public class UserRepository : IUserRepository
{
    private readonly ISessionBuilder _sessionBuilder;

    public UserRepository(ISessionBuilder sessionBuilder)
    {
        _sessionBuilder = sessionBuilder;
    }

    public User GetByID(string userID)
    {
        using (ISession session = _sessionBuilder.GetSession())
        {
            return session.Get<User>(userID);
        }
    }
}
@H_502_2@这是管理NHibernate会话/工厂的最好方法吗?我听说过关于工作单元的事情,并为每个Web请求创建一个会话,并在最后刷新它。从我可以告诉,我目前的实现不是做任何这些。它基本上依赖于Repository从会话工厂获取会话,并使用它来运行查询

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

解决方法

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

原文链接:https://www.f2er.com/aspnet/254470.html

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