EF 7 Migrazioni con più DBContexts

entity-framework-core

Domanda

Ho un problema con lo scaffolding e faccio migrazioni da una libreria di classi con più DBContexts. Ho trovato un argomento da riga di comando che assomiglia a questo per le migrazioni:

dnx ef migration add -c Contexts.IndustryContext initial

Ma questo non viene nemmeno ottenuto dal parser della riga di comando. Voglio tutti i miei DBContexts e le risorse del database fuori dal progetto web MVC 6 principale e nelle loro DLL. È possibile? Quale magia della riga di comando è richiesta?

Risposta accettata

Stavo cercando una risposta a questa domanda e volevo fornire la mia soluzione per ef core 2.0.

Microsoft.EntityFrameworkCore.Tools.DotNet deve essere aggiunto a ciascuna delle tue librerie di classi che DbContext . Fare clic con il pulsante destro del mouse sul progetto e selezionare Edit *.csproj . Quindi, aggiungere il seguente:

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

Nota: la versione è la più recente al momento di questo post e probabilmente cambierà in futuro.

Successivamente, ho creato una nuova app Console (.NET Core) chiamata Migrations.Console e l'ho aggiunta alla mia soluzione. Dovrai fare riferimento a tutte le DbContext librerie di classi DbContext in questo progetto.

Ho installato Microsoft.EntityFrameworkCore pacchetti Microsoft.EntityFrameworkCore e Microsoft.EntityFrameworkCore.Design Nuget.

Nell'app Migrations.Console , ho creato una classe DbContextFactory per ogni contesto Db che ho.

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;

public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
    public ApplicationDbContext CreateDbContext(string[] args)
    {
        var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
        builder.UseSqlServer("Server=(local);Database=DATABASENAME;Trusted_Connection=True;MultipleActiveResultSets=true");
        return new ApplicationDbContext(builder.Options);
    }
}

Nota: assicurati di aggiornare il contesto e la stringa di connessione in modo che corrisponda al tuo progetto.

Ora che ogni DbContextFactory è stato creato, è possibile iniziare a creare le migrazioni. Vai alla cartella per la tua biblioteca di classi. Il modo più semplice per fare clic con il pulsante destro del mouse sul progetto e Open Folder in File Explorer . Quindi, digita cmd nella barra degli indirizzi di File Explorer per aprire un prompt dei comandi in quella cartella.

Ora usa il seguente comando per creare la migrazione:

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

Nota: cambia ApplicationDbContext in modo che corrisponda al nome del contesto su cui stai lavorando. Inoltre, se hai chiamato il progetto della console con un altro nome, dovrai modificare il percorso e il nome.

Ora dovresti vedere una cartella Migrations nella tua libreria di classi.


Risposta popolare

Non ho ancora provato a inserire il livello dati in un progetto separato, ma ho più DbContexts in un singolo progetto API Web. Dovrebbe funzionare anche con progetti separati.

Utilizzando la sintassi più recente (v1.0.0), si creano le migrazioni in questo modo:

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

Dove <context> è il nome completo della classe del tuo DbContext - come MyProject.Data.MyDbContext

Metto le mie migrazioni per diversi contesti in diverse directory, ma non credo che tu debba farlo. Assicurati solo che abbiano valori di migration-name diversi.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché