2013-05-05 51 views
0

我有一个测试,要求我的SimpleMembershipProvider UserProfile表中的所有用户都被删除。我想在我的SeedMembership()方法(下面)中做到这一点。类似membership.DeleteAllUsers。任何想法如何做到这一点?如何删除我的会员表中的所有用户?

private int SeedMembership() 
     { 

      if (!WebMatrix.WebData.WebSecurity.Initialized) 
      { 
       WebSecurity.InitializeDatabaseConnection("TestConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 
      } 


      var roles = (SimpleRoleProvider)Roles.Provider; 
      var membership = (SimpleMembershipProvider)Membership.Provider; 

      if (!roles.RoleExists("Admin")) 
      { 
       roles.CreateRole("Admin"); 
      } 
      if (!roles.RoleExists("User")) 
      { 
       roles.CreateRole("User"); 
      } 

      // Somehow delete all users here 

      if (membership.GetUser("user", false) == null) 
      { 
       membership.CreateUserAndAccount("user", "covert"); 
      } 
      if (!roles.GetRolesForUser("user").Contains("Admin")) 
      { 
       roles.AddUsersToRoles(new[] { "user" }, new[] { "admin" }); 
      } 

      return membership.GetUserId("user"); 

     } 

回答

0

我不得不在几个项目中实现类似的功能,最简单的方法,我发现这样做是这样的(从内存中,但我认为这是去工作):

var dbUsernames = context.Database.SqlQuery<string>("SELECT UserName FROM UserProfile"); 
foreach (string dbUsername in dbUsernames) 
{ 
    string[] userRoles = Roles.GetRolesForUser(dbUsername); 
    if (userRoles != null && userRoles.Length > 0) 
    { 
     Roles.RemoveUserFromRoles(dbUsername, userRoles); 
    } 
    int userId = context.Database.SqlQuery<int>("SELECT UserId FROM UserProfile WHERE UserName = {0}", dbUsername).First(); 
    // HERE: Delete any other dependent rows in other tables that use UserId, and have referential integrity 
    // Now tear down any final bits and delete the user, for example: 
    Membership.DeleteUser(dbUsername, true); 
    context.Database.ExecuteSqlCommand(
     "DELETE FROM webpages_Membership WHERE UserId = {0}", userId); 
} 
1

通过这个链接

http://blogs.thesitedoctor.co.uk/tim/Trackback.aspx?guid=b16a67b9-4c34-4566-a689-088e6c087405 

或简单地做到这一点...

foreach (MembershipUser u in Membership.GetAllUsers()) 
{ 
Membership.DeleteUser(u.UserName, true); 
} 
+0

这将无法正常工作在OP的情况下 - 他们使用'SimpleMembershipProvider'(WebMatrix的一部分),并且文档指出,如果提供者已经通过调用“WebSecurity.InitializeDatabaseConnection”来初始化'GetAllUsers'方法,代码。 – Tim 2013-05-05 19:02:04

+0

我得到这个错误: 项目已被添加。键入字典: – 2016-03-24 07:43:11

0

在SQL Server和MySQL可以运行:

TRUNCATE my_aspnet_users 
TRUNCATE my_aspnet_membership 
TRUNCATE my_aspnet_profiles 
TRUNCATE my_aspnet_roles 
0

好,如果你想删除所有成员,删除表并重新创建它,它更多的里不是一个答案。或者使用实体框架更容易。

相关问题