2016-11-25 3 views
0

Ich versuche ein neues Projekt für die kontinuierliche Integration vorzubereiten. Mein Projekt ist in .Net Core geschrieben und verwendet Entity Framework Core für den Datenbankzugriff. Was ich versuchen muss, ist, in meinem Projekt einen Pre-Build-Schritt hinzuzufügen, um eine neue Migration hinzuzufügen. Ich habe die Webapp bereits eingerichtet, um alle Migrationen beim Start zu übernehmen, aber ich wollte Migrationen vor dem Commit meines Codes nicht wirklich manuell erstellen. Ich glaube, dass dies Teil des CI-Setups sein sollte, da ich während der Entwicklung hunderte von Datenbankänderungen durchgehen kann, aber wenn ich meinen neuesten Code bereitstelle, würde ich gerne ein Migrationsskript für jede veröffentlichte Version haben.Can Entity Framework Core kann so konfiguriert werden, dass Migrationen während der Erstellung des Projekts generiert werden

Ich verwende derzeit v1.1.0 aller nuget Abhängigkeiten für .Net Core und EF Core.

EDIT: Der Link von J.Pichardo ist ähnlich, was ich fragen. Aber von dem, was ich sagen kann, geht es um die Anwendung von Migrationen (die ich bereits in meinem Code gearbeitet habe).

Antwort von Bricelam kann als eine Code-Version von dem, was ich versuche, zu arbeiten. Aber ich hatte gehofft, dass es eine Möglichkeit gibt, die Datei project.json so zu konfigurieren, dass das Add-Migration-Skript mit einem generierten Namen für die Migration ausgeführt wird (idealerweise mithilfe von Umgebungsvariablen, die von meinem CI gesetzt werden können).

Dies würde mir dann erlauben, Migrationen während der Entwicklung manuell zu erstellen, aber dann kann mein CI vollständige Migrationen während der Endphase jedes Release-Prozesses erstellen.

+0

Möglicherweise verwandt? http://stackoverflow.com/questions/11616772/continuous-integration-with-ef-code-first-migrations –

Antwort

0

Sie können programmgesteuert Migrationen generieren, aber ich würde es nicht empfehlen. Beziehen Sie dazu das Paket Microsoft.EntityFrameworkCore.Design und verwenden Sie einen ähnlichen Code wie den folgenden.

using (var context = new MyDbContext()) 
{ 
    var services = ((IInfrastructure<IServiceProvider>)context).Instance; 
    var codeHelper = new CSharpHelper(); 
    var scaffolder = ActivatorUtilities.CreateInstance<MigrationsScaffolder>(
     services, 
     new CSharpMigrationsGenerator(
      codeHelper, 
      new CSharpMigrationOperationGenerator(codeHelper), 
      new CSharpSnapshotGenerator(codeHelper))); 

    var migration = scaffolder.ScaffoldMigration(
     "MyMigration", 
     "MyApp.Data"); 
    File.WriteAllText(
     migration.MigrationId + migration.FileExtension, 
     migration.MigrationCode); 
    File.WriteAllText(
     migration.MigrationId + ".Designer" + migration.FileExtension, 
     migration.MetadataCode); 
    File.WriteAllText(migration.SnapshotName + migration.FileExtension, 
     migration.SnapshotCode); 
} 
Verwandte Themen