2011-06-25 2 views
8

Je me demandais quelle serait la meilleure façon d'installer le schéma d'adhésion à la volée.C# Créer par programme un schéma d'adhésion ASP.NET

À l'heure actuelle, la solution à laquelle je pense est d'exécuter en quelque sorte aspnet_regsql.exe avec des arguments à exécuter sur ma connexion db.

Comment puis-je accomplir ceci? Y a-t-il un meilleur moyen?

Répondre

8

Ok, j'ai trouvé un bien meilleur moyen d'accomplir cela, j'utilise toujours la fonction MembershipExists(), mais je l'installe avec cette instruction, que je ne connaissais pas jusqu'à il y a quelques minutes.

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

fait comme ceci:

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

Je ne sais pas comment il va se comporter sur un environnement de production.