如何在“ WebSecurity”类之前调用​​“ WebSecurity.InitializeDatabaseConnection”方法

时间:2019-07-07 10:16:57

标签: c# asp.net asp.net-mvc model-view-controller

我正在尝试将成员资格植入asp.net mvc应用程序(位于migrations / config.cs文件中)

protected override void Seed(Logintest.Models.ApplicationDbContext 
context)
    {
        var roles = (SimpleRoleProvider)Roles.Provider;
        var membership = (SimpleMembershipProvider)Membership.Provider;

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

我还在Web.config中启用了角色管理器和成员资格管理器

<roleManager enabled="true" defaultProvider="simple">
  <providers>
    <clear/>
    <add name="simple" type="WebMatrix.WebData.SimpleRoleProvider,
         WebMatrix.WebData"/>
  </providers>
</roleManager>
<membership defaultProvider="simple">
  <providers>
    <clear/>
    <add name="simple" type="WebMatrix.WebData.SimpleMembershipProvider,
         WebMatrix.WebData"/>
  </providers>
</membership>

尽管当我尝试在Package Manager控制台中更新数据库以运行Seed方法时,出现以下错误:

  

您必须调用“ WebSecurity.InitializeDatabaseConnection”方法   在调用“ WebSecurity”类的任何其他方法之前。这个电话   应该放在网站根目录中的_AppStart.cshtml文件中。

我找不到_AppStart.cshtml文件,因此我创建了该文件并将其放置在其中:

@using System.Configuration;
@{  
   WebSecurity.InitializeDatabaseConnection("DefaultConnection", 
   "UserProfile", "UserId", "UserName", autoCreateTables: true);
}

尝试以上方法后,我仍然遇到相同的错误。有人可以指出正确的方向吗?即如何在“ WebSecurity”类之前调用​​“ WebSecurity.InitializeDatabaseConnection”方法?

1 个答案:

答案 0 :(得分:0)

因此,在弄乱了代码之后,我在seed()方法的顶部添加了初始化数据库调用,它可以正常工作

protected override void Seed(Logintest.Models.ApplicationDbContext context)
    {
        WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", 
          "UserId", "UserName", autoCreateTables: true);

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

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