Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

240
Views
Las herramientas de migración de Entity Framework 6.2 solo admiten secuencias de comandos de una migración descendente cuando se conecta a una base de datos real

Intentar migraciones de secuencias de comandos desde el código de Entity Framework 6.2, pero la generación de secuencias de comandos de migración hacia abajo falla cuando las migraciones de origen y de destino se especifican explícitamente.

Por ejemplo, tengo un proyecto de prueba DbContext que contiene tres migraciones:

  1. 201506161504528_InitialCreate
  2. 202202102238227_Add_Entity_FantasticalCreature
  3. 202202102239481_FantasticalCreature_Add_IsWinged_Add_HasTail

La creación de secuencias de comandos de una migración ascendente funciona bien explícitamente con estos comandos:

 Update-Database -SourceMigration "201506161504528_InitialCreate" ` -TargetMigration "202202102238227_Add_Entity_FantasticalCreature" ` -Script -Verbose .\migrate.exe "TestContext.dll" /targetMigration="202202102238227_Add_Entity_FantasticalCreature" /scriptFile="script.sql" /sourceMigration="201506161504528_InitialCreate" /verbose

Además, el uso de MigratorScriptingDecorator y ScriptUpdate con parámetros similares también generará el script ascendente al especificar explícitamente las migraciones de origen y de destino.

Sin embargo, todos los métodos descritos anteriormente fallarán cuando se intente hacer lo contrario, es decir, escribir una migración descendente en la que tanto el destino como el origen se especifican explícitamente y donde el origen es un MigrationId "inferior".

Por ejemplo, la Update-Database invocada así:

 update-database -SourceMigration "202202102238227_Add_Entity_FantasticalCreature" ` -TargetMigration "201506161504528_InitialCreate" ` -Script -Verbose

resulta en una excepción:

System.Data.Entity.Migrations.Infrastructure.MigrationsException: no se admite la creación de secuencias de comandos para degradar entre dos migraciones específicas.

en System.Data.Entity.Migrations.Infrastructure.MigratorScriptingDecorator.ScriptUpdate(String sourceMigration, String targetMigration)
en System.Data.Entity.Migrations.Design.ToolingFacade.ScriptUpdateRunner.RunCore()
en System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()

No se admite el scripting de la degradación entre dos migraciones específicas.

Se produce la misma excepción al intentar realizar la migración de secuencias de comandos hacia abajo de forma explícita utilizando migrate.exe o MigratorScriptingDecorator.ScriptUpdate también.

Sin embargo , si la migración de origen no se especifica explícitamente, se especifica una migración de destino y se proporciona una cadena de conexión a una base de datos que se encuentra en una migración "más alta" que la migración de destino especificada, entonces los tres métodos descritos anteriormente generarán con éxito una Script SQL de migración hacia abajo.

Por ejemplo, generar con éxito la migración descendente utilizando Update-Database :

 # Assumes TestContextDb-01 is currently at migration 2 or 3. Update-Database -TargetMigration "201506161504528_InitialCreate" ` -Script ` -ConnectionString "Data Source=localhost; Initial Catalog=TestContextDb-01; Integrated Security=true;" ` -ConnectionProviderName "System.Data.SqlClient" -Verbose

Por qué es eso:

  • La generación de secuencias de comandos de migración ascendente funciona con migración de origen y destino explícita, pero ¿no se admite lo mismo para la migración descendente?
  • ¿La generación de secuencias de comandos de migración hacia abajo solo funciona cuando se especifica una base de datos real a la que conectarse?
  • ¿Hay alguna forma de generar una migración descendente sin tener que especificar una base de datos a la que conectarse?
  • ¿Por qué la inconsistencia? ¿La migración de scripts hacia abajo no sería simplemente lo contrario de hacia arriba?

FWIW, tengo la sospecha de que las herramientas de migración pueden crear implícitamente una base de datos localdb o SQL Server Express para realizar la migración ascendente explícita del script. No sé cómo eso necesariamente se relaciona con todo lo expuesto anteriormente, ni entiendo por qué no se puede hacer lo mismo para la migración explícita de secuencias de comandos hacia abajo.

¡Cualquier idea es muy apreciada!

over 4 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!