2011-06-25 8 views
8

Me preguntaba cuál sería la mejor manera de instalar el esquema de membresía sobre la marcha.C# Programemente cree el Esquema de Membresía de ASP.NET

En este momento la solución en la que estoy pensando es de alguna manera ejecutar aspnet_regsql.exe con argumentos para ejecutar en mi conexión db.

¿Cómo puedo lograr esto? ¿Hay una mejor manera?

Respuesta

8

Ok Encontré una forma mucho mejor de lograr esto, todavía utilizo la función MembershipExists(), pero la instalo con esta declaración, que no conocía hasta hace unos minutos.

SqlServices.Install(database, SqlFeatures.All, connectionString); 
2

hice así:

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

No estoy seguro de cómo se comportará en un entorno de producción.

Cuestiones relacionadas