Ciao sto lavorando su un'app di nucleo aspnet, che utilizza la versione di ef core:
"Microsoft.EntityFrameworkCore.Design": "1.1.0", "Microsoft.EntityFrameworkCore.SqlServer": "1.1.0"
e dotnet standard 1.6.1.
ecco il mio scenaro:
- 4 dbcontext con solo un database
- DBSet o chiunque può mostrare in due o tre contesti, ad esempio AContext contiene la tabella A, BContext contiene anche la tabella A. ma nessuno di essi includerà tutte le tabelle come voglio nel contesto specifico focalizzato sul suo scopo.
- molte chiavi straniere tra i tavoli
questo causa la tabella dup nel database, ma per risolvere questo, ho fatto sotto
- creare un MigrationDBContext per includere tutti i DBSet
- aggiungere la migrazione su questo MigrationDBContext
ecco cosa ottengo
- creare correttamente il database e le tabelle con lo schema e il nome corretti
- errore durante la chiamata: serviceScope.ServiceProvider.GetService (). Database.Migrate (); messaggio di errore: esiste già un oggetto "A" denominato nel database.
sfortunatamente, il comando update-database in ef core con -v non mostrerà lo script sql, Script-Migration mostra solo la semplice istruzione sql create.
le mie domande sono
- come eseguire il debug di questa situazione?
- Controllato il file di migrazione, esiste un metodo down and up, ma questo errore sembra che l'ef core chiami solo il metodo up nel file di migrazione senza chiamare prima il down, e ne risulti un po 'dup come la tabella è ancora lì. quindi, c'è qualche opzione per controllare il comportamento della migrazione?
Il modo più semplice è creare l'unico DbContext che includerà tutti i gruppi di entità e le relazioni tra di loro. Successivamente è possibile separare la logica di archiviazione con i repository. Il modo difficile è creare migrazioni specifiche del contesto per ogni contesto. E se hai bisogno di aggiungere un insieme di entità, che esiste in un altro contesto, dovrai creare una migrazione vuota per quel contesto. Questo è un modo un po 'sporco.