2017-12-27 235 views
1

正在運行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」。

+0

我[他們的GitHub頁面上提交一個bug(https://github.com/aspnet/EntityFrameworkCore/issues)。 – mason

+1

'DbContext'如何初始化?您是否針對ASP.NET Core項目或類庫進行遷移?如果它是ASP.NET Core,請發佈你的'Startup'類。如果它是一個類庫,請發佈您的'IDesignTimeDbContextFactory'實現。 –

+0

我的主要問題是:我能以某種方式在調試器中運行'dotnet ef ...'嗎? – Sam

回答

1

我有同樣的問題,並已將此添加到的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

+0

EF Core 2修正了此問題。EF Core 1.1不會修復此問題。 – Lars

0

添加代碼在你的DbContext構造函數等待一個調試器,你就可以調試:

public class ApplicationDbContext: DbContext 
{ 
    public ApplicationDbContext() 
    { 
     while (!Debugger.IsAttached) 
     { 
      Thread.Sleep(100); 
     } 
    } 
    ... 
} 

然後用你喜歡的調試器附加DOTNET過程。