Migraciones EF 7 con múltiples DBContexts

entity-framework-core

Pregunta

Tengo un problema con los andamios y haciendo migraciones desde una biblioteca de clases con múltiples DBContexts. Encontré un argumento de línea de comando que se ve así para migraciones:

dnx ef migration add -c Contexts.IndustryContext initial

Pero esto ni siquiera pasa por el analizador de línea de comandos. Quiero todos mis DBContexts y cosas de base de datos fuera del proyecto web principal MVC 6 y en sus propios archivos DLL. es posible? ¿Qué magia de línea de comando se requiere?

Respuesta aceptada

Estaba buscando una respuesta a esta pregunta y quería proporcionar mi solución para ef core 2.0.

Microsoft.EntityFrameworkCore.Tools.DotNet debe agregarse a cada una de las bibliotecas de clase que tienen un DbContext en ellas. Haga clic derecho en el proyecto y seleccione Edit *.csproj . Luego, agregue lo siguiente:

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0-preview2-final" />
  </ItemGroup>

Nota: la versión es la última en el momento de esta publicación y es probable que cambie en el futuro.

Luego, creé una nueva aplicación de consola (.NET Core) llamada Migrations.Console y la agregué a mi Solución. Tendrá que hacer referencia a todas sus bibliotecas de clase DbContext en este proyecto.

Instalé los paquetes Nuget Microsoft.EntityFrameworkCore y Microsoft.EntityFrameworkCore.Design .

En la aplicación Migrations.Console , creé una clase DbContextFactory para cada contexto Db que tengo.

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0-preview2-final" />
  </ItemGroup>

Nota: asegúrese de actualizar el contexto y la cadena de conexión para que coincida con su proyecto.

Ahora que se ha creado cada DbContextFactory , puede comenzar a crear las migraciones. Ve a la carpeta de tu biblioteca de clases. La forma más fácil es hacer clic derecho en el proyecto y Open Folder in File Explorer . Luego, escriba cmd en la barra de direcciones del File Explorer para abrir un indicador de comando en esa carpeta.

Ahora usa el siguiente comando para crear la migración:

dotnet ef migrations add InitialCreate -c ApplicationDbContext --startup-project ../Migrations.Console/Migrations.Console.csproj

Nota: Cambie ApplicationDbContext para que coincida con el nombre del contexto con el que está trabajando. Además, si llamó al proyecto de la consola con otro nombre, deberá cambiar la ruta y el nombre.

Ahora debería ver una carpeta de Migrations en su biblioteca de clases.


Respuesta popular

No he intentado colocar la capa de datos en un proyecto separado todavía, pero tengo varios DbContexts en un solo proyecto de API web. Debería funcionar con proyectos separados también.

Usando la última sintaxis (v1.0.0), crea sus migraciones de la siguiente manera:

dotnet ef migrations add <migration-name> -o <output-directory> -c <context>

Donde <context> es el nombre de clase completo de su DbContext, como MyProject.Data.MyDbContext

Pongo mis migraciones para diferentes contextos en directorios diferentes, pero no creo que tenga que hacerlo. Solo asegúrese de que tengan diferentes valores de migration-name .




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué