1

私はEntity Framework 4を使用しており、Contextを作成し、パブリックプロパティを介してIContextインターフェイスとして公開するUnitOfWorkクラスを作成しました。Context クラスは ObjectContext から継承し、Poco エンティティをパブリック プロパティとして公開します。

public IObjectSet<User> Users
        {
            get { return _users ?? (_users = CreateObjectSet<User>("Users")); }
        }
private IObjectSet<User> _users;

また、そのコンテキストをコンストラクター パラメーターとして受け取り、リポジトリ クラスでクエリを実行するときにそのコンテキストを使用する、いくつかのリポジトリ クラスも作成しました。これは私がすべてを一緒に使用する方法です:

using(var uow = new UnitOfWork(connectionstring))
{
using(var repository = new UserRepository(uio.Context))
{
//This is the place where a connection is opened in the database
var user = repository.GetUserByName(username);
}
    }

//The connection is still open here even though 

UnitOfWork クラスは IDisposable インターフェイスを実装し、その Dispose メソッド内で Context.Dispose() を呼び出します。

アプリケーションを閉じると、データベースで開いている接続が失われるので、質問は次のとおりです。ここで何が起こっているのですか? :-) データベースで開いている接続を閉じるために、UnitOfWork クラスで Context (ObjectContext) インスタンスを適切に破棄するにはどうすればよいですか?

4

1 に答える 1

1

コンテキストの破棄に関しては、適切に行っていると思います。Sql Server Provider は接続プールをサポートしているため、using(var uow = new UnitOfWork(connectionstring))ブロックの終了後に表示されるのはプール内の接続です。

接続プーリングの詳細については、次の記事を参照してください: http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

于 2011-07-05T18:15:38.330 に答える