C # Программно создать схему членства ASP.NET - PullRequest
8 голосов
/ 25 июня 2011

Мне было интересно, как лучше всего установить схему членства на лету.

Прямо сейчас решение, о котором я думаю, состоит в том, чтобы как-то запустить aspnet_regsql.exe с аргументами для выполнения в моем соединении с БД.

Как мне это сделать? Есть ли лучший способ?

Ответы [ 2 ]

8 голосов
/ 11 июля 2011

Хорошо, я нашел гораздо лучший способ сделать это, я все еще использую функцию MembershipExists(), но я устанавливаю ее с этим оператором, о котором я не знал всего пару минут назад.

SqlServices.Install(database, SqlFeatures.All, connectionString);
2 голосов
/ 03 июля 2011

Понравилось ли это так:

    public static void Initialize()
    {
        var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["membership"].ConnectionString);

        if (!MembershipExists(connection))
        {
            // create schema
            string regsql = Path.Combine(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(), "aspnet_regsql.exe");
            string args = string.Format(@"-E -S {0} -A all -d {1}", connection.DataSource, connection.Database);

            var proc = Process.Start(regsql, args);
            if (proc != null)
                proc.WaitForExit();
        }
    }

    public static bool MembershipExists(SqlConnection connection)
    {
        try
        {
            connection.Open();
            var query = new SqlCommand("select count(*) from sysobjects where name = 'aspnet_CheckSchemaVersion' and type = 'P'", connection);
            return query.ExecuteScalar() as int? == 1;
        }
        finally
        {
            connection.Close();
        }
    }

Не уверен, как он будет себя вести в производственной среде.

...