Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何删除我的成员资格表中的所有用户?_C#_Asp.net_Membership - Fatal编程技术网

C# 如何删除我的成员资格表中的所有用户?

C# 如何删除我的成员资格表中的所有用户?,c#,asp.net,membership,C#,Asp.net,Membership,我有一个测试要求删除SimpleMembershipProvider UserProfile表中的所有用户。我想在我的SeedMembership()方法(如下)中实现这一点。比如会员资格。删除用户。你知道怎么做吗 private int SeedMembership() { if (!WebMatrix.WebData.WebSecurity.Initialized) { WebSecurity.

我有一个测试要求删除SimpleMembershipProvider UserProfile表中的所有用户。我想在我的SeedMembership()方法(如下)中实现这一点。比如会员资格。删除用户。你知道怎么做吗

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");

        }
通过这个链接

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);
}

在SQL Server和MySQL中,您可以运行:

TRUNCATE my_aspnet_users
TRUNCATE my_aspnet_membership
TRUNCATE my_aspnet_profiles
TRUNCATE my_aspnet_roles

如果要删除所有成员,请删除表并重新创建它,这更像是一个技巧,而不是答案。或者更容易使用实体框架

我已经在几个项目上实现了类似的功能,我发现最简单的方法就是这样(从内存中,但我认为这是可行的):

var dbUsernames=context.Database.SqlQuery(“从UserProfile中选择用户名”);
foreach(dbUsernames中的字符串dbUsername)
{
字符串[]userRoles=Roles.GetRolesForUser(dbUsername);
if(userRoles!=null&&userRoles.Length>0)
{
Roles.RemoveUserFromRoles(dbUsername,userRoles);
}
int userId=context.Database.SqlQuery(“从UserName={0}的UserProfile中选择userId”,dbUsername.First();
//此处:删除其他表中使用UserId且具有引用完整性的任何其他依赖行
//现在删除所有最后的位并删除用户,例如:
Membership.DeleteUser(dbUsername,true);
context.Database.ExecuteSqlCommand(
“从网页中删除,其中UserId={0}”,UserId);
}

这在OP的情况下不起作用-他们使用的是
SimpleMembershipProvider
(WebMatrix的一部分),文档中指出,如果通过调用
WebSecurity.InitializeDatabaseConnection来初始化提供程序,则
GetAllUsers
方法将失败,代码中有哪个OP。我得到了这个错误:项目已经被添加。输入字典:这不是很有效,每次调用都会调用save来删除用户
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);
}