2017-12-27 24 views
1

実行中dotnet ef database drop私はエラーが発生します。このコマンドをデバッグするにはどうすれば問題の詳細を知ることができますか?または、このエラーの原因を見つけるにはどうすればよいですか?dotnet efデータベースをどのようにデバッグするのですか?

System.ObjectDisposedException:破棄されたオブジェクトにアクセスできません。このエラーの一般的な原因は、依存性注入から解決されたコンテキストを破棄し、後でアプリケーションの別の場所で同じコンテキストインスタンスを使用しようとすることです。これは、コンテキストでDispose()を呼び出す場合、またはusingステートメントでコンテキストをラップする場合に発生する可能性があります。依存性注入を使用している場合は、依存性注入コンテナがコンテキストインスタンスを処理するようにする必要があります。 オブジェクト名: "ApplicationDbContext"。 BEI Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider() BEI Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure.get_Instance() BEI Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService [TService(IInfrastructure 1 accessor) bei Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func 1工場) BEI Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(文字列contextType) BEI Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.DropDatabase(文字列contextType) BEI Microsoft.EntityFrameworkCore.Design.OperationExecutor.DropDatabaseImpl(文字列contextType) Microsoft.EntityFrameworkCore.Design.OperationExecutor.DropDatabaseから継承されます。 <> c__DisplayClass0_1。 .ctor> b__0() bei Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(アクションアクション) 配置されたオブジェクトにアクセスできません。このエラーの一般的な原因は、依存性注入から解決されたコンテキストを破棄し、後でアプリケーションの別の場所で同じコンテキストインスタンスを使用しようとすることです。これは、コンテキストでDispose()を呼び出す場合、またはusingステートメントでコンテキストをラップする場合に発生する可能性があります。依存性注入を使用している場合は、依存性注入コンテナがコンテキストインスタンスを処理するようにする必要があります。 オブジェクト名: "ApplicationDbContext"。

+0

私は(https://github.com/aspnet/EntityFrameworkCore/issues)[自分のGitHubのページにバグを報告]と思います。 – mason

+1

'DbContext'はどのように初期化されますか? ASP.NET Coreプロジェクトまたはクラスライブラリに移行していますか? ASP.NETコアの場合は、 '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プロセスを添付します。

関連する問題