过去两天我一直在阅读 UnitOfWork 模式,但没有正确理解。
我为每个班级都有一个存储库。例如。员工、考勤、工资、部门、地址等
存储库意味着 - 这些类中的每一个都有自己的 CRUD 操作(创建自己的数据库连接)。这些创建单独的数据库连接并插入。
当我想以原子方式执行多个操作时会出现问题。例如。在单个事务中插入员工和地址。但是我的存储库不允许这样做,因为 Employee 只负责管理 Employee 表。
我可以使用 System.Transactions 但这会让我发疯,因为单个事务有许多数据库连接。
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 中使用存储过程吗?