如何调试dotnet ef数据库丢弃?
正在运行dotnet ef database drop
我收到一条错误消息。我怎样才能调试这个命令,获得更多关于这个问题的细节?或者我怎么能找到这个错误的来源?如何调试dotnet ef数据库丢弃?
System.ObjectDisposedException:无法访问处置的对象。造成这种错误的一个常见原因是处理从依赖注入解决的上下文,然后尝试在应用程序的其他地方使用相同的上下文实例。如果您在上下文中调用Dispose(),或者在使用语句中包装上下文,则可能会发生这种情况。如果您正在使用依赖注入,则应该让依赖注入容器负责处理上下文实例。 对象名称:“ApplicationDbContext”。 贝Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider() 贝Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure.get_Instance() 贝Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService [TService](IInfrastructure
1 accessor) bei Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func
1厂) 贝Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(字符串contextType) 贝Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.DropDatabase(字符串contextType) 贝Microsoft.EntityFrameworkCore.Design.OperationExecutor.DropDatabaseImpl(字符串contextType) bei Microsoft.EntityFrameworkCore.Design.OperationExecutor.DropDatabase。 <> c__DisplayClass0_1。 < .ctor> b__0() bei Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action) 无法访问处置的对象。造成这种错误的一个常见原因是处理从依赖注入解决的上下文,然后尝试在应用程序的其他地方使用相同的上下文实例。如果您在上下文中调用Dispose(),或者在使用语句中包装上下文,则可能会发生这种情况。如果您正在使用依赖注入,则应该让依赖注入容器负责处理上下文实例。 对象名称:“ApplicationDbContext”。
回答:
我有同样的问题,并已将此添加到的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}");
}
,并在构造和的DbContext处置调用这个函数。
这似乎是一个问题,如果将DbContext添加到依赖注入的作用域生命周期中。我为此提出了一个问题。
https://github.com/aspnet/EntityFrameworkCore/issues/10693
回答:
添加代码在你的DbContext构造函数等待一个调试器,你就可以调试:
public class ApplicationDbContext: DbContext {
public ApplicationDbContext()
{
while (!Debugger.IsAttached)
{
Thread.Sleep(100);
}
}
...
}
然后用你喜欢的调试器附加DOTNET过程。
以上是 如何调试dotnet ef数据库丢弃? 的全部内容, 来源链接: utcz.com/qa/265965.html