0

Je travaille sur une application Asp.Net Mvc, puis je souhaite créer une base de données à l'aide de la classe d'initialisation de base de données personnalisée que j'ai créée.Migration Seed, méthode ignore la méthode seed de l'initialiseur de base de données

Voici donc mon DbContext:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { 
    public ApplicationDbContext() 
     : base("defaultConnection", throwIfV1Schema: false) { 
    } 

    static ApplicationDbContext() { 
     Database.SetInitializer(new ApplicationDbInitializer()); 
    } 

et voici ma classe ApplicationDbInitializer:

public class ApplicationDbInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext> { 

    protected override void Seed(ApplicationDbContext context) { 
     InitializeIdentityForEF(context); 
     base.Seed(context); 
    } 

    public static void InitializeIdentityForEF(ApplicationDbContext db) { 

     // Create Role Admin if it does not exist 
     // Add user admin to Role Admin if not already added 
     // And some more initializing stuff 

    } 
} 

Note: J'utilise Migrations aussi. Par conséquent, lorsque j'essaie de mettre à jour et d'amorcer ma base de données à l'aide de la commande Update-Database (même si je supprime la base de données manuellement), la base de données est en cours de création mais elle ne l'est pas.

Si je fais quelque chose de mal ou qu'il y a d'autres façons, je serai reconnaissant d'obtenir votre aide.

Répondre

1

Cela ressemble au même problème que dans this question. Par conséquent, le code de départ ne sera exécuté que si vous créez une instance de votre ApplicationDbContext.

Ajouter un code comme celui-ci à votre démarrage de l'application:

var ctx = new ApplicationDbContext(); 
ctx.Database.Initialize(true); 

Ensuite, votre base de données sera ensemencé la prochaine fois que votre application commence.

Alternativement, si vous vouliez utiliser la commande Update-Database de semences votre base de données, qui utilise une méthode différente Seed. Vous pouvez voir un exemple here.