So führen Sie die Methode Seed() der Migrationsklasse Configuration aus

So führen Sie die Methode Seed() der Migrationsklasse Configuration aus

Beantwortung Ihrer ersten Frage. Erstellen Sie eine Migration, indem Sie add-migration SeedOnly

ausführen

Löschen Sie den gesamten Up()- und Down()-Code, der generiert wurde, wenn es ausstehende Änderungen gab

public partial class SeedOnly : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}

Dann können Sie eine bestimmte Migration anvisieren, indem Sie update-database -TargetMigration SeedOnly in der Package Manager-Konsole

ausführen

Nach Recherchen habe ich endlich die Problemumgehung für dieses Problem gefunden:

1) Machen Sie Configuration öffentlich:

public sealed class Configuration : DbMigrationsConfiguration<YourContextClassHere>

2) Fügen Sie den unten stehenden Code an beliebiger Stelle hinzu. Es wird die neueste Migration ausführen und Ihre Datenbank aktualisieren:

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

Beantwortung von Frage Nr. 2:Extrahieren Sie den gesamten Code aus der Seed()-Methode in eine andere Klasse. Rufen Sie das dann innerhalb der Seed()-Methode aus der Configuration-Klasse auf:

    protected override void Seed(DbContext ctx)
    {
        new DatabaseSeed().Seed(ctx);
    }

Dann können Sie es von überall aufrufen:

    new DatabaseSeed().Seed(new DbContext());