1

現在、UnityおよびEntityフレームワークを使用してASP.NET MVCアプリケーションを構築しています。私は、依存性を解決するためにContainerControlledLifetimeManagerを使用するUnity MVC 3の設定を使用しています(http://devtrends.co.uk/blog/introducing-the-unity.mvc3-nuget-package-to-reconcile-mvc3-unity - と - idisposable)。これは、ページがロードされた後に時間のかかるタスクを実行する別のスレッドをスピンアップしようとするまで、うまく動作し、ユーザーは更新を受け取ります。スレッドから、私はこのエラーを取得する:ThreadPoolでUnityを使用したDbcontextのLIfetime管理

The operation cannot be completed because the DbContext has been disposed.

私は、コンテナとそれの子が配置されますので、メインスレッドが完了しているからだと考えています。誰かがこれのための解決策を知っていますか?

ありがとうございます!

public ActionResult Blah() 
{ 
    MyViewModel model = new MyViewModel(); 

    using (var dbc = new MyDbContext()) 
    { 
    model.items = from x in dbc.items select x; 
    }  

    View(model) 
} 

itemsこの場合には解決されていないので、解決策は次のとおりです:

model.items = (from x in dbc.items select x).ToList(); 
+0

DbContextを宣言して使用するコードを投稿できますか? perhpsあなたが何かを使っている(){} – MethodMan

+1

あなたは文脈を注入していますか?コードは間違いなくここにあります:) –

答えて

0

多くの場合、問題は、あなたのコントローラーにあなたのようなコードがしていることですコントローラへの依存性注入を伴う標準的なコンテキストライフタイム処理は、予想される有効期間(コントローラが既にリリースされている)の後に注入されたコンテキストを使用するため、シナリオでは機能しません。

あなたの時間がかかる操作は、別の単一のコンテナへの参照を持っていなければならず、TransientまたはPerResolveライフタイムマネージャで解決された新しいコンテキストインスタンスを要求する必要があります。操作が完了または中止されると、コンテキストの処理が処理されます。

IMHOは、ASP.NET(またはIISがホストする)アプリケーションでカスタムスレッドをスパニングするのはあまり良いことではありません。

+0

OPは彼が依存性注入のためにUnityを使用していることを明確に説明しているので、「新しいMyDbContext()」はありません。 – keithl8041

3

関連する問題