私は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) インスタンスを適切に破棄するにはどうすればよいですか?