J'ai 2 questions:
1) Comment puis-je exécuter la méthode Seed () depuis la console du gestionnaire de packages sans mettre à jour le modèle de base de données?
2) Existe-t-il un moyen d’appeler la méthode Seed () dans le code?
Merci pour tout conseil.
Après des recherches, j'ai finalement trouvé la solution de contournement pour ce problème:
1) Rendre public Configuration
:
public sealed class Configuration : DbMigrationsConfiguration<YourContextClassHere>
2) Ajoutez le code ci-dessous n'importe où. Il exécutera la dernière migration et mettra à jour votre base de données:
Configuration configuration = new Configuration();
configuration.ContextType = typeof(YourContextClassHere);
var migrator = new DbMigrator(configuration);
//This will get the SQL script which will update the DB and write it to debug
var scriptor = new MigratorScriptingDecorator(migrator);
string script = scriptor.ScriptUpdate(sourceMigration: null, targetMigration: null).ToString();
Debug.Write(script);
//This will run the migration update script and will run Seed() method
migrator.Update();
Répondre à votre première question. Créer une migration en exécutant add-migration SeedOnly
Effacer tous les codes Up () et Down () générés s'il y avait des modifications en attente
public partial class SeedOnly : DbMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
Vous pouvez ensuite cibler une migration spécifique en exécutant update-database -TargetMigration SeedOnly dans la console Package Manager.
Réponse à la question n ° 2: Extrayez tout le code de la méthode Seed () dans une autre classe. Appelez ensuite cela depuis la méthode Seed () depuis la classe Configuration:
protected override void Seed(DbContext ctx)
{
new DatabaseSeed().Seed(ctx);
}
Ensuite, vous pouvez l'appeler de n'importe où:
new DatabaseSeed().Seed(new DbContext());
Répondre à la question 1:
Les gens travaillent généralement autour de cela soit:
reference: http://blog.oneunicorn.com/2013/05/28/database-initializer-and-migration-seed-methods/
Ce n’est pas exactement ce que vous recherchez, mais jetez un oeil: Exécution des migrations d’Entity Framework via la ligne de commande Prompt .__, ce qui peut vous aider, vous ou quelqu'un, à oublier la migration de base de données d’application, car vous pouvez facilement créer des scripts. courir automatiquement ...
Ajoutez une nouvelle méthode publique à la classe Configuration
. La nouvelle méthode appelle uniquement la méthode protégée Seed
:
public void RunSeed(DbContext db)
{
Seed(db);
}
Appelez ensuite la nouvelle méthode à partir de, par exemple. un test unitaire:
var db = new SomeDbContext();
var configuration = new Configuration();
configuration.RunSeed(db);
Si vous utilisez initiliazer en tant que contexte comme MigrateDatabaseToLatestVersion, la méthode de départ dans la configuration doit être exécutée automatiquement. Ne pensez pas que vous devez l'appeler manuellement.