我通過劫持通用的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);
}
}
不確定你的問題到底是什麼,但我想我會提出一些你可能沒有考慮過的事情:每次你添加一個用戶,你將迭代整個用戶集合...我猜你'希望不要有太多的用戶:) – 2010-08-09 04:55:52
嘿,是的,因此TODO。我只是試圖讓這個該死的東西工作 - 我按照優先順序做事:) – 2010-08-09 05:17:29