Метод выбрасывает меня из родительского метода - PullRequest
0 голосов
/ 09 августа 2010

Я добавляю пользователя (пользовательский класс) через мой репозиторий, перехватывая общий метод Add (T item) и выбрасывая его в закрытый метод AddUser, если 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);
        }
    }

1 Ответ

1 голос
/ 09 августа 2010

Это звучит точно так же, как что-то во FlushMembership выдает исключение, и оно становится все выше в стеке вызовов.Вы можете попробовать разбить все исключения (а не только необработанные исключения), проверив все управляемые исключения в диалоговом окне исключений Visual Studio (ctrl-alt-e с использованием сочетаний клавиш c #).Вы также можете проверить окно вывода на наличие исключений первого шанса.

...