es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué se actualizan automáticamente los paquetes de Entity Framework cuando ejecuto una migración?

Tengo un contexto de base de datos definido en un proyecto .NET Standard 2.0 para que pueda ser consumido tanto por clientes de .NET 5.0 como por clientes de .NET 4.7.x. Estoy intentando crear una migración inicial y generar scripts a partir de ella. Estoy usando el siguiente comando para generar la migración:

dotnet ef migrations add InitialCreate --project My.Standard.DataContext.Project --startup-project My.DotNet5.Api

Para que el proyecto Standard se compile, necesito crear la migración utilizando la versión 3.1.21 de Entity Framework, ya que versiones más recientes no funcionan con .NET Standard 2.0. Sin embargo, cuando ejecuto el comando anterior, los paquetes en la API de .NET 5.0 se actualizan automáticamente a la versión 5.0.12, lo que significa que el código de migración que se genera es incompatible con el proyecto Standard que lo incluye.

¿Por qué está ocurriendo esto? ¿Cómo puedo evitar que ocurra?

Mi mejor suposición es que se debe a que estoy utilizando algo que no es compatible con la versión 3.1.21. Sé que actualmente estoy utilizando cadenas para los Id y si mal no recuerdo, eso no es posible directamente en la versión 3.1.21.

Aquí está el archivo del proyecto antes de que se cambie automáticamente:

<itemgroup>
  <packagereference include="Microsoft.EntityFrameworkCore" version="3.1.21"></packagereference>
  <packagereference include="Microsoft.EntityFrameworkCore.SqlServer" version="3.1.21"></packagereference>
  <packagereference include="Microsoft.EntityFrameworkCore.Tools" version="3.1.21">
    <privateassets>all</privateassets>
    <includeassets>runtime; build; native; contentfiles; analyzers; buildtransitive</includeassets>
  </packagereference>
  <packagereference include="Microsoft.Identity.Web" version="1.20.0"></packagereference>
  <packagereference include="Swashbuckle.AspNetCore" version="6.2.3"></packagereference>
</itemgroup>
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la que esto está sucediendo es porque el comando dotnet ef actualiza automáticamente los paquetes a sus versiones más recientes. Para evitar que esto suceda, puedes especificar los números de versión de los paquetes en el comando.

    Por ejemplo:

    dotnet ef --version 3.1.21 migrations add InitialCreate --project My.Standard.DataContext.Project --startup-project My.DotNet5.Api
    

    Esto asegurará que el comando dotnet ef utilice la versión 3.1.21 de Entity Framework y no actualice los paquetes a la última versión.

    Otra solución sería actualizar tu proyecto Standard para utilizar una versión más reciente de Entity Framework que sea compatible con .NET Standard 2.0, como 5.0.x.

    Por último, si necesitas utilizar cadenas de texto para los Ids, puedes configurarlo en tu DbContext mediante la anulación del método OnModelCreating y especificando la propiedad como una cadena de texto.

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
       modelBuilder
          .Entity<myentity>()
          .Property(e => e.Id)
          .HasColumnType("nvarchar(450)")
          .IsRequired();
    }
    

    Esto te permitirá utilizar cadenas de texto para los Ids con Entity Framework 3.1.21.

Comments are closed.