pages framework asp.net-core entity-framework-core ef-migrations

asp.net core - framework - ¿Por qué eliminar-migración ejecuta mi aplicación?



entity framework razor (1)

Actualización para ASP.NET Core 2.1

En ASP.NET Core 2.1 los métodos cambiaron ligeramente. El método general es similar al 2.0, solo se han cambiado el nombre de los métodos y los tipos de retorno.

public static void Main(string[] args) { CreateWebHostBuilder(args) .Build() .Migrate(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) { return new WebHostBuilder() ...; // Do not call .Build() here }

ASP.NET Core 2.0

Si está en ASP.NET Core 2.0 / EF Core 2.0, ha habido un cambio para cubrir mejor estos casos, de modo que las herramientas de línea de comandos puedan funcionar mejor.

Está bastante bien cubierto en este anuncio .

Se reduce a tener un método estático BuildWebHost que configura toda la aplicación, pero no la ejecuta.

public class Program { public static void Main(string[] args) { var host = BuildWebHost(args); host.Run(); } // Tools will use this to get application services public static IWebHost BuildWebHost(string[] args) => new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .Build(); }

También con EF 2.0 ahora se recomienda mover las migraciones al método principal después de que se haya llamado a BuildWebHost . Por ejemplo

public static void Main(string[] args) { var host = BuildWebHost(args) .Migrate(); host.Run(); }

Donde Migrate es un método de extensión:

public static IWebHost Migrate(this IWebHost webhost) { using (var scope = webhost.Services.GetService<IServiceScopeFactory>().CreateScope()) { using (var dbContext = scope.ServiceProvider.GetRequiredService<MyDbContext>()) { dbContext.Database.Migrate(); } } return webhost; }

Ahora las migraciones solo se ejecutan cuando se ejecuta su aplicación. Cuando ejecuta herramientas de línea de comandos, solo se BuildWebHost a BuildWebHost y no se aplicarán migraciones.

Hice alguna actualización de versión en los últimos meses y ahora noté que cuando uso "remove-migración" para eliminar la migración que revertí, primero ejecuta mi aplicación.

(Me di cuenta de que debido a que actualizamos la base de datos dentro del inicio, entonces llegué a una situación en la que no puedo eliminar las migraciones, ya que cada vez que intenté eliminar la migración, ejecutó automáticamente el inicio que aplica la migración a db, luego falló la eliminación ya que lo ve en db.)

¿alguna idea?