Quando si dotnet ef database drop
viene visualizzato un errore. Come posso eseguire il debug di questo comando, per ottenere maggiori dettagli sul problema? O come posso trovare la fonte di questo errore?
System.ObjectDisposedException: impossibile accedere a un oggetto disposto. Una causa comune di questo errore è l'eliminazione di un contesto risolto dall'integrazione delle dipendenze e successivamente il tentativo di utilizzare la stessa istanza di contesto altrove nell'applicazione. Ciò può verificarsi se si chiama Dispose () nel contesto o si avvolge il contesto in un'istruzione using. Se si utilizza l'iniezione di dipendenza, è necessario lasciare che il contenitore di input delle dipendenze si occupi di eliminare le istanze di contesto. Objektname: "ApplicationDbContext". bei Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider () da Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure.get_Instance () da Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService [TService] (IInfrastructure
1 accessor) bei Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func
1 factory) bei Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext (String contextType) bei Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.DropDatabase (String contextType) bei Microsoft.EntityFrameworkCore. Design.OperationExecutor.DropDatabaseImpl (String contextType) a Microsoft.EntityFrameworkCore.Design.OperationExecutor.DropDatabase. <> C__DisplayClass0_1. <. Ctor> b__0 () a Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute (Azione azione) Impossibile accedere a oggetto disposto. Una causa comune di questo errore è l'eliminazione di un contesto risolto dall'integrazione delle dipendenze e successivamente il tentativo di utilizzare la stessa istanza di contesto altrove nell'applicazione. Ciò può verificarsi se si chiama Dispose () nel contesto o si avvolge il contesto in un'istruzione using. Se si utilizza l'iniezione di dipendenza, è necessario lasciare che il contenitore di input delle dipendenze si occupi di eliminare le istanze di contesto. Objektname: "ApplicationDbContext".
Ho lo stesso problema e ho aggiunto questo al DbContext:
private void PrintStackTrace()
{
var st = new StackTrace();
foreach (var sf in st.GetFrames())
Console.WriteLine($"{sf.GetMethod().DeclaringType.Assembly.GetName().Name} {sf.GetMethod().DeclaringType.Name} {sf.GetMethod().Name}");
}
e chiama questa funzione nel contructor e Dispose of the DbContext.
Sembra essere un problema, se il DbContext viene aggiunto con durata scoped all'input della dipendenza. Ho presentato un problema per questo.
aggiungi il codice per attendere un debugger nel tuo costruttore DbContext e sarai in grado di eseguire il debug:
public class ApplicationDbContext: DbContext
{
public ApplicationDbContext()
{
while (!Debugger.IsAttached)
{
Thread.Sleep(100);
}
}
...
}
Quindi allegare il processo dotnet usando il proprio debugger preferito.