2016-04-19 7 views
1

私はいくつかのデータベースアクションを実行するメソッドを持つクラスを持っています。
データベースアクセスに使用されるメソッド呼び出しで、既存の(オープンな)コンテキストを送信できるようにします。
ただし、コンテキストが送信されない場合は、新しいコンテキストを作成します。既存のオブジェクトへの参照を作成するときに呼び出されますか?

メソッドコールに含まれていれば、オブジェクトが破棄されていないことを確認したいだけです。

呼び出されたメソッドで使用範囲が使用されているときにオブジェクトが破棄されますか?

// DbService class 
class DbService 
{ 
    private void SomeDbAction(SomeDbContextObject backendContext = null) 
    { 
     using (var context = backendContext ?? CreateNewContextObject()) 
     { 
      // Some actions using the context 
     } 
    } 
} 


// Call from another class 
class Temp 
{ 
    void DoSomeThing() 
    { 
     var existingContext = new SomeDbContextObject(); 
     dbService.SomeDbAction(existingContext); 
     // Is dbService disposed here? 
     UseContextForSomethingElse(existingContext); 
    } 
} 
+1

dbServiceはここに配置されていますか?はい、 'using'ステートメントを残しておいてください。 – spender

+1

'using'は' Dispose() 'を呼び出します。 'Dispose()'が呼び出されないようにするには、 'using'ステートメントを使わないでください。 –

+0

Disposeはusingステートメントの閉じ括弧に達したときに呼び出されます。自動廃棄を望んでいないので、usingステートメントを削除し、準備ができたら手動でexistingContext.Disposeを使用します – MikeT

答えて

9
// Is dbService disposed here? 

はい、それが配置されています。これはオプションの引数はあなたに対して働く場合である - 優れた2つの特定のオーバーロードを持っている:

class DbService 
{ 
    public void SomeDbAction(SomeDbContextObject backendContext) 
    { 

      // Some actions using the context 

    } 
    public void SomeDbAction() 
    { 
     using (var context = CreateNewContextObject()) 
     { 
      SomeDbAction(context); 
     } 
    } 
} 
2

あなたはbackendContextオブジェクトのない処分すべきで、それが渡されましたが、あなたが作成した場合はそうする必要がある場合方法内:

private void CoreSomeDbAction(SomeDbContextObject backendContext) { 
    //TODO: Some actions using the context 
} 

private void SomeDbAction(SomeDbContextObject backendContext = null) { 
    if (null == backendContext) { 
    // created context should be disposed 
    using (SomeDbContextObject context = new SomeDbContextObject(...)) { 
     CoreSomeDbAction(context); 
    } 
    } 
    else 
    CoreSomeDbAction(backendContext); // passed context should be prevent intact 
} 
関連する問題