Как вызвать метод «WebSecurity.InitializeDatabaseConnection» перед классом «WebSecurity» - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь заполнить членство в моем приложении 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>

Хотя при попытке обновить базу данных в консоли диспетчера пакетов, чтобы запустить метод Seed, я получаю следующую ошибку:

Вы должны вызвать метод "WebSecurity.InitializeDatabaseConnection". перед вызовом любого другого метода класса "WebSecurity". Этот звонок должен быть помещен в файл _AppStart.cshtml в корне вашего сайта.

Я не могу найти файл _AppStart.cshtml, поэтому я создал его и поместил в него следующее:

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

После попытки выше я все еще получаю ту же ошибку. Может кто-нибудь, пожалуйста, укажите мне в правильном направлении? то есть как мне вызвать метод "WebSecurity.InitializeDatabaseConnection" перед классом "WebSecurity"?

1 Ответ

0 голосов
/ 07 июля 2019

Поэтому, возившись с кодом, я добавил вызов инициализации базы данных в верхней части метода 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" });
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...