2017-01-25 28 views
0

対私は、ユーザーがデータベースから設定された目的であるHttpSessionStateBase HttpContext.Current.Session

Session["CurrentUser"] = user; 

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

以下のようにセッション変数を設定するコントローラを有します。次に、メソッドが呼び出されて、同じユーザーオブジェクトを渡すセッションにさまざまな他のビットのデータをロードします。 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であると私は私の人生のために、なぜうまくいかないことができます???

おかげで、 ジェームズ

+0

[ここ](http://stackoverflow.com/q/18309239/1429080)、および対応する回答[ここ]で問題が発生している可能性はありますか(http://stackoverflow.com/ a/18309307/1429080) – user1429080

答えて

1

は、よりよい解決策は、引数としてヘルパーメソッドにセッションオブジェクトを渡すことであろう。

静的な「スカイフック」は一般的に悪い習慣であり、コードをテストするのが難しくなります。

また、HttpSessionStateBase 'LoadCustomerSessionData(user、businessUnit、db)'の拡張メソッドを作成すると、より流暢なアプローチになります。

関連する問題