私は作業単位のクラスに取り組んでおり、接続をどのように処理する必要があるのか興味があります。私のリポジトリは作業単位を取り、その接続をGet()コマンドに使用します。
明らかに、Commit()はすべての追加、更新、削除を処理します。これにより、接続が開かれ、トランザクションが開始され、終了すると閉じられます。取得はどのように処理する必要がありますか?
UOWは、コンストラクターで接続を開き、完全に終了したら閉じる必要がありますか?つまり、UOWをリポジトリからリポジトリに渡す間、接続は開いています。それとも、必要な場合にのみ開閉する必要がありますか?
アプローチ#1:作業単位は接続を開き、処理が終了するまで接続は開いたままになりますか?
public UnitOfWork(IDbConnection connection)
{
Connection = connection;
Connection.Open();
Transaction = Connection.BeginTransaction();
}
アプローチ#2:読み取りの直前に開き、直後に閉じるGetメソッドのスニペット。複数のリポジトリに渡す場合は、同じ接続が使用され、束を開いたり閉じたりするだけです。
using (var reader = manager.GetReader())
{
UOW.Connection.Open();
while (reader.Read())
list.Add(factory.CreateTFromReader(reader));
UOW.Connection.Close();
}