HttpSessionStateBase vs HttpContext.Current.Session

时间:2017-01-25 10:28:47

标签: asp.net asp.net-mvc session model-view-controller

我有一个控制器,它将Session变量设置如下

    Session["CurrentUser"] = user;

    using (DatabaseEntities db = new DatabaseEntities())
    {
            Helpers.LoadSessionData(user, user.Tenancy.BusinessUnits.FirstOrDefault(), db);
    }

其中user是从数据库设置的对象。然后调用一种方法将各种其他数据位加载到传递在同一用户对象中的Session。 LoadSessionData方法的几行开头如下

    currentUser = db.Users.Include(u => u.BusinessMemberships)
                             .Include(u => u.BusinessMemberships.Select(bm => bm.DivisionMemberships))
                             //.Include(u => u.Tenancy)
                             //.Include(u => u.Tenancy.BusinessUnits)
                             //.Include(u => u.Tenancy.BusinessUnits.Select(bu => bu.Settings))
                             //.Include(u => u.Tenancy.BusinessUnits.Select(bu => bu.Addresses))
                             .FirstOrDefault(u => u.UserId == currentUser.UserId && u.Void == false);

        HttpContext.Current.Session[Zahara.Web.Resources.DataKeys.SessionCurrentUser] = currentUser;

运行此方法时HttpContext.Current.Session为NULL,我不能为我的生活找出原因???

谢谢, 詹姆斯

1 个答案:

答案 0 :(得分:1)

更好的解决方案是将会话对象作为参数传递给helper方法。

静态'天空挂钩'通常是不好的做法,让你的代码更难测试。

或者,您可以为HttpSessionStateBase创建一个扩展方法'LoadCustomerSessionData(user,businessUnit,db)',这将是一种更流畅的方法。