Рекомендуемый способ инициализации базы данных `aspnetdb` для веб-приложения (роли, пользователи)?

Я пытаюсь написать консольное приложение, которое будет создавать и заполнять базу данных аутентификации для веб-приложения. Это должно быть частью процедуры развертывания. Следующий код частично работает:

using System.Web.Management;
using System.Web.Security;

namespace InitAspnetdbAppRolesAndUsers
{
    class Program
    {
        static string SQLServerName = @"COMPUTER\SQLINSTANCE";
        static string ASPNETdbName = "aspnetdb";

        static void Main(string[] args)
        {
            // Create the aspnetdb database.
            SqlServices.Install(SQLServerName, ASPNETdbName, SqlFeatures.All);

            // Set the application.
            Membership.ApplicationName = "my_app";

            const string adminRoleName = "Administrator";
            const string adminUserName = "admin";
            const string adminPassword = "adminPa$$word1234";

            Roles.Enabled = true;

            if (!Roles.RoleExists(adminRoleName))
                Roles.CreateRole(adminRoleName);

            if (Membership.GetUser(adminUserName) == null)
                Membership.CreateUser(adminUserName, adminPassword);

            if (!Roles.IsUserInRole(adminUserName, adminRoleName))
                Roles.AddUserToRole(adminUserName, adminRoleName);
        }
    }
}

SqlServices.Install(SQLServerName, ASPNETdbName, SqlFeatures.All); выполняется и aspnetdb пустая база данных создается без проблем. Тем не менее Roles.Enabled = true; вылетает с (не точная английская формулировка, переведено)...

Unhandled exception: System.InvalidOperationException: The method can be called
only during initialization phase of the application, before it is launched.
Declare the method that will be called in the phase using the attribute
PreApplicationStartMethodAttribute.
   in System.Web.Compilation.BuildManager.ThrowIfPreAppStartNotRunning()
   in System.Web.Security.Roles.set_Enabled(Boolean value)
   in InitAspnetdbAppRolesAndUsers.Program.Main(String[] args) 
in D:\ASP_NET_snippets\InitAspnetdbAppRolesAndUsers\Program.cs:line 23

Может ли PreApplicationStartMethodAttribute добавить также для консольного приложения? Если да, как это можно сделать? Есть ли другой способ заселить asbnetdb база данных? Цель состоит в том, чтобы установить имена, другие свойства и т. Д., Которые были извлечены из некоторой другой базы данных

1 ответ

Решение

PreApplicationStartMethodAttribute является частью ASP.NET и будет вызываться только ASP.NET. Он не будет ничего делать в консольном приложении.

Есть еще один способ включить роли, см. Этот учебник.

По сути, конфигурация, которую вы должны добавить в свой App.config, такова:

<configuration>
    <system.web>
        <roleManager enabled="true" />
    </system.web>
</configuration>

Конечно, вам также необходимо правильно настроить менеджер ролей, чтобы он указывал на нужную базу данных.

Другие вопросы по тегам