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.