2013-08-02 7 views
2

Je veux semer notre base de données initiale avec les utilisateurs (pour une application Web ASP.NET) sur l'installation. Pour une raison quelconque, il ne fonctionne pas correctement. J'ai lu des tas de sujets qui disent la plupart du temps exécuter update-database qui fonctionne très bien à partir de la console, mais comment cela fonctionne dans un environnement de production? Pour tenter de contourner cela, j'ai fini avec le code suivant - qu'est-ce qui me manque ici?Code EF premier, l'ensemencement et le déploiement

Global.asax.cs :: Application_Start()

try 
{ 
    initializationError = null; 
    WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 
} 
catch (Exception ex) 
{ 
    initializationError = ex; 
} 

// Initialize database and seed data 
Database.SetInitializer(new EntitiesContextInitializer()); 

// Now initialize it 
using (var context = new EMUI.Models.UsersContext()) 
{ 
    if (!context.Database.Exists()) 
    { 
     context.Database.Initialize(true); 
    } 
} 

EntitiesContextInitializer

internal sealed class EntitiesContextInitializer : MigrateDatabaseToLatestVersion<EMUI.Models.UsersContext, Configuration> 
{ 
} 

Configuration

internal sealed class Configuration : DbMigrationsConfiguration<EMUI.Models.UsersContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
    } 

    protected override void Seed(EM.Models.UsersContext context) 
    { 
     if (!WebSecurity.Initialized) 
     { 
      WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 
     } 

     if (!Roles.RoleExists("Administrator")) 
     { 
      Roles.CreateRole("Administrator"); 
     } 

     // More similar seeding 
    } 
} 

Répondre

1

Vous devez faire les étapes suivantes pour cela fonctionne:

1) faire votre classe de configuration en tant que public, et non internal (Configuration des migrations)

2) coller ce code à votre Application_Start de global.asax :

// Now initialize it 
using (var context = new EMUI.Models.UsersContext()) 
{ 
    if (!context.Database.Exists()) 
    { 
      Configuration configuration = new Configuration(); 
      configuration.ContextType = typeof(EMUI.Models.UsersContext); 
      var migrator = new DbMigrator(configuration); 
      migrator.Update(); 
    } 
} 

Espérons que cela aide.

+0

Celui-ci fonctionne pour moi. – Maris

Questions connexes