¿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>
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:
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étodoOnModelCreating
y especificando la propiedad como una cadena de texto.Esto te permitirá utilizar cadenas de texto para los Ids con Entity Framework 3.1.21.