2010-08-09 33 views
0

我通過劫持通用的Add(T item)方法並將其引發到私有的AddUser方法,通過我的Repository添加一個User(自定義類),如果item == typeof(User) 。它就是這樣做的,但是一旦它觸及FlushMembership()調用,它就會退出太早,即。它不會觸及超出FlushMembership()調用的任何內容,因此不會添加用戶。它通過了FlushMembership中的所有內容。我不明白。拋出父方法的方法

private void AddUser(User u) 
    { 
     var existingUser = Membership.GetUser(u.Username); 

     // TODO: This could be more elegant 
     FlushMembership(); // Clean out this crap 

     var mU = existingUser; 

     if (mU == null) 
     { 
      Membership.CreateUser(u.Username, u.Password, u.Email); 
      CKDClientAreaEntities.Current.AddObject(GetSetName<User>(), u); 
     } 
     else 
      mU = Membership.GetUser(u.Username); 

     if(Roles.GetRolesForUser(u.Username).Count() <= 0) 
     Roles.AddUserToRole(mU.UserName, u.Role); 

     Membership.UpdateUser(mU); 
    } 

    private void FlushMembership() 
    { 
     var allMembers = Membership.GetAllUsers(); 
     var allRoles = Roles.GetAllRoles(); 

     foreach(var r in allRoles) 
     { 
      var ms = Roles.GetUsersInRole(r); 

      foreach(var m in ms) 
      { 
       var u = Users.Single(o => o.Username == m); 

       if(u == null) 
        Roles.RemoveUserFromRoles(m, allRoles);  // If the user doesn't exist, remove them from all roles! 
      } 
     } 

     foreach(var m in allMembers) 
     { 
      var u = Users.Single(o => o.Username == m); 

      if (u == null) 
       Membership.DeleteUser(u.Username); 
     } 
    } 
+0

不確定你的問題到底是什麼,但我想我會提出一些你可能沒有考慮過的事情:每次你添加一個用戶,你將迭代整個用戶集合...我猜你'希望不要有太多的用戶:) – 2010-08-09 04:55:52

+0

嘿,是的,因此TODO。我只是試圖讓這個該死的東西工作 - 我按照優先順序做事:) – 2010-08-09 05:17:29

回答

1

這聽起來就像FlushMembership中的某些事件會引發異常,並且它在調用堆棧中被捕獲得更高。通過檢查Visual Studio異常對話框中的所有託管異常(使用c#鍵綁定的ctrl-alt-e),您可以嘗試打破所有異常(而不僅僅是未處理的異常)。您還可以檢查輸出窗口以查找第一次機會例外情況。

+0

的確如此。這假設m是用戶名,它實際上是一個MembershipUser對象! var u = Users.Single(o => o.Username == m); – 2010-08-10 01:46:22

相關問題