2017-09-16 2 views
0

Ich versuche, Migrationen programmgesteuert mithilfe von Entity Framework Core 2.0 in einem Code-First ASP.Net Core 2.0-Projekt anzuwenden. Wenn ich die Migrationen manuell über ein Terminal durchführe, werden sie ohne Probleme angewendet. Das Anwenden der Migrationen in meiner Startup-Klasse führt jedoch dazu, dass sich das Datenbankmodell nie ändert.Migrationen werden nicht angewendet

Mache ich das falsch?

public Startup(IConfiguration configuration) 
{ 
    Configuration = configuration; 
} 

public IConfiguration Configuration { get; } 

// This method gets called by the runtime. Use this method to add services to the container. 
public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc(); 
    services.AddEntityFrameworkSqlite(); 
    services.AddDbContext<ApplicationContext>(options => options.UseSqlite("Data Source=blogging.db")); 
    services.AddDbContext<UserContext>(options => options.UseSqlite("Data Source=blogging.db")); 
} 

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 
    if (env.IsDevelopment()) 
    { 
     app.UseDeveloperExceptionPage(); 
    } 

    app.UseMvc(); 
    var services = app.ApplicationServices.GetService<IServiceScopeFactory>(); 
    var context = services.CreateScope().ServiceProvider.GetRequiredService<ApplicationContext>(); 
    context.Database.Migrate(); 
} 

ich dies vom Terminal laufen kann und es funktioniert gut:

Dotnet ef Migrationen hinzufügen FourthMigration --context EFCore_Test.DataAccess.ApplicationContext

Ich habe mehrere DataContext Typen; nur einer repräsentiert das gesamte Datenmodell und der Rest wird nur verwendet, um auf die Datenbank in einem mehr domänenspezifischen Manor zuzugreifen. Die ApplicationContext repräsentiert meinen Datenkontext "Everything + Spüle". In diesem Kontext führe ich meine Migrationen und Updates durch.

Als Vorbereitung für die Bereitstellung in Azure möchte ich, dass die Web-App bei jeder Bereitstellung migriert wird, anstatt Powershell-Skripts zu verkabeln, um die dotnet-Kern-Toolbefehle auszuführen.

Antwort

0

Die neuen Migrationsdateien werden nicht aufgenommen und dem Lösungsexplorer in Visual Studio für macOS hinzugefügt. Ich habe ursprünglich nichts davon gedacht, weil ich angenommen habe, dass die IDE dotnet build unter der Haube verwendet, die die Migrationsdateien aufnehmen würde. Ich bin nicht sicher, was die IDE tut, aber wenn ich mit diesen fehlenden Migrationsdateien baue, sind sie nicht in der kompilierten Assembly enthalten. Dies würde dazu führen, dass die App beim Start nie migriert wird.

Ich habe die Migrationsklassen im Projektmappen-Explorer manuell hinzugefügt, dann die App ausgeführt und die Migration angewendet. Ich wiederholte dies mehrmals mit mehreren Migrationen und hatte nie wieder ein Problem.

Verwandte Themen