2011-02-08 14 views
4

エンティティフレームワークを使用するプロバイダパターンにはどのような動作を使用する必要がありますか?EntityFramework内のエンティティのインスタンスによるパフォーマンスの影響

public class TestProvider : IDisposable 
{ 
    public Entities entities = new Entities(); 

    public IEnumerable<Tag> GetAll() 
    { 
     return entities.Tag.ToList(); 
    } 

    public ... 

    #region IDisposable Members 

    public void Dispose() 
    { 
     entities.Dispose(); 
    } 

    #endregion 
} 

それとも使用しても大丈夫です。

public class TestProvider 
{ 
    public IEnumerable<Tag> GetAll() 
    { 
     using (var entities = new Entities()) 
     { 
      return entities.Tag.ToList(); 
     } 
    } 

    public ... 
} 

は、それがパフォーマンスに暗示していますか?それについての賛否両論は何ですか?

答えて

1

それはTestProvider存在しなければならないとあなたが取得したエンティティ上で実行するためにどのような操作をしたいですかどのくらいに依存します。一般的に、ObjectContextインスタンスはできるだけ最短時間で使用する必要がありますが、単一作業ユニットも表す必要があります。 ObjectContextインスタンスは共有しないでください。私は関連する質問hereに答えました。

これは両方のアプローチがいくつかのシナリオでは正しいことを意味します。エンティティを取得して変更し、同じプロバイダインスタンスでそれらを保存することを期待する場合、最初のアプローチは問題ありません。エンティティを取得するだけですぐに変更する必要はなく、ほかのものを選択したくない場合、2番目の方法は問題ありません。

+0

これらのケースでは、パフォーマンスは同じか、わずかに異なりますか? – BrunoLM

+0

@Bruno:タグだけを選択したい場合、パフォーマンスは同じになります。 –

関連する問題