UnitOfWorkパターンについて過去2日間読んでいますが、正しく理解できませんでした。
クラスごとにリポジトリがあります。例えば。従業員、出席、給与、部門、住所など。
リポジトリとは-これらの各クラスには独自のCRUD操作があります(独自のデータベース接続を作成します)。これらは個別のデータベース接続を作成し、挿入します。
複数の操作をアトミックとして実行したい場合に問題が発生します。例えば。単一のトランザクションで従業員と住所に挿入します。しかし、従業員は従業員テーブルのみを管理する責任があるため、私のリポジトリでは許可されていません。
System.Transactionsを使用できますが、1つのトランザクションに多数のデータベース接続があるため、これは私を夢中にさせます。
UoWは私の場合に適用されますが、いくつかの変更を加えますか?
編集:
私のサンプルコード
public class AccountTransactionManager
{
Properties.Settings settings = new Properties.Settings();
public void InsertAccountTransaction(AccountTransaction accountTransaction)
{
SqlParameter AccountId = new SqlParameter { ParameterName = "@AccountId", Value = accountTransaction.AccountId, Direction = ParameterDirection.Input, SqlDbType = SqlDbType.Int };
SqlParameter PAYMENT_DATE = new SqlParameter { ParameterName = "@PAYMENT_DATE", Value = accountTransaction.PAYMENT_DATE, Direction = ParameterDirection.Input, SqlDbType = SqlDbType.DateTime };
SqlParameter CURRENT_BALANCE = new SqlParameter { ParameterName = "@CURRENT_BALANCE", Value = accountTransaction.CURRENT_BALANCE, Direction = ParameterDirection.Input, SqlDbType = SqlDbType.Money };
Helper.SqlHelper.Execute(settings.SQLConnectStr
, (tran) =>
{
Helper.SqlHelper.ExecuteNonQuery(tran, CommandType.StoredProcedure, "usp_AccountTransactionInsert", AccountId, PAYMENT_DATE, CURRENT_BALANCE);
});
}
}
SqlHelperコード
public static void Execute(string connectionString, Action<SqlTransaction> CallBack)
{
if (CallBack == null)
return;
using (var con = new SqlConnection(connectionString))
{
con.Open();
using (var tran = con.BeginTransaction())
{
#region Call procedures
try
{
CallBack(tran);
tran.Commit();
}
catch (SqlException ex)
{
tran.Rollback();
throw ex;
}
finally
{
con.Close();
}
#endregion
}
}
}
要件は非常に頻繁に変更されます。したがって、ORMを使用するか、独自のリポジトリを作成する必要があります。ORMでストアドプロシージャを使用できますか?