如何调试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添加到依赖注入的作用域生命周期中。我为此提出了一个问题。
EF Core 2修正了此问题。EF Core 1.1不会修复此问题。 – Lars
添加代码在你的DbContext构造函数等待一个调试器,你就可以调试:
public class ApplicationDbContext: DbContext
{
public ApplicationDbContext()
{
while (!Debugger.IsAttached)
{
Thread.Sleep(100);
}
}
...
}
然后用你喜欢的调试器附加DOTNET过程。
我[他们的GitHub页面上提交一个bug(https://github.com/aspnet/EntityFrameworkCore/issues)。 – mason
'DbContext'如何初始化?您是否针对ASP.NET Core项目或类库进行迁移?如果它是ASP.NET Core,请发布你的'Startup'类。如果它是一个类库,请发布您的'IDesignTimeDbContextFactory'实现。 –
我的主要问题是:我能以某种方式在调试器中运行'dotnet ef ...'吗? – Sam