2012-03-12 9 views
1

にエンティティフレームワークのために更新されません。次のようにcustomRoleProviderが設定IHAVE:ユーザーロールは、私はユーザーとロールの間に次の関係を持つアプリを持っているcustomroleprovider

public class CustomRoleProvider : RoleProvider 
     { 
      private readonly IUnitOfWork _unitOfWork; 

      public CustomRoleProvider() 
      { 
       _unitOfWork = DependencyResolver.Current.GetService<IUnitOfWork>(); 
      } 

      public CustomRoleProvider(IUnitOfWork unitOfWork) 
      { 
       _unitOfWork = unitOfWork; 
      } 

... 

      public override string[] GetRolesForUser(string username) 
      { 
       var user = _unitOfWork.UserRepository.GetUser(username); 

       var roles = from r in user.Roles 
          select r.Name; 

       if (roles != null) 
        return roles.ToArray(); 
       else 
        return new string[] { }; 
      } 

      public override bool IsUserInRole(string username, string roleName) 
      { 
       var user = _unitOfWork.UserRepository.GetUser(username); 

       var roles = from r in user.Roles 
          select r.Name; 

       return roles.Any(r => r.Equals(roleName, StringComparison.CurrentCultureIgnoreCase)); 
      } 
    ... 

     } 

これは正常に動作するようですし、例外を除いて、[OK]の役割を返します。

不適切なアプリを再起動するまで、コードに新しい役割が見つかりません。実験のビットを通じ

私はUnitOfWorkのをインスタンス化した場合、私はそれを必要とする時はいつでも役割の完全なリストが発見されていることを発見しました:

public override string[] GetRolesForUser(string username) 
      { 
        **var unitOfWork = new UnitOfWork();** 

       var user = unitOfWork.UserRepository.GetUser(username); 

       var roles = from r in user.Roles 
          select r.Name; 

       if (roles != null) 
        return roles.ToArray(); 
       else 
        return new string[] { }; 
      } 

私は本当にこのアプローチを行うにはしたくないが。

これを修正する方法を知っている人はいますか?

+0

_unitOfWork.Save()です。 .SaveChanges()を呼び出しますか? –

+0

は確かです。申し訳ありませんが、間違いがありました。 – Stevek

+0

ObjectContext.Refreshを呼び出すとどうなりますか? –

答えて

1

ユーザーのCookieにあなたの役割をキャッシュするかどうかを確認してください。 のroleManagerノードにcacheRolesInCookie="false"を追加してみてください。

+1

ロールコレクションには、クッキーを削除して強制的に再構築するメソッドがありますか? http://msdn.microsoft.com/en-us/library/system.web.security.roles.deletecookie.aspx –

+0

チェックしました。それは私のGetrolesForUserメソッドに継続しているので、間違いなく問題を引き起こすクッキーではありません – Stevek

関連する問題