我一直在阅读有关UnitOfWork模式的最近两天,但没有正确理解它。IUnitOfWork会适合我的场景
我有每个类的存储库。 例如。 员工,出勤,薪资,部门,地址等。
存储库方式 - 这些类中的每一个都会有自己的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中使用存储过程吗?
我没有看到ORM与更改需求有什么关系。如果你的意思是你的数据模型会经常变化,那么你需要改变它..所以ORM或DAL无关紧要。 –
@MystereMan:是的,我的数据模型会经常变化,以及我正在为应用程序开发采用渐进式方法。在这个级别不知道需求。 –
同样,无论您是否使用ORM,您都必须更改您的代码,因此我没有看到任何差异或任何理由担心使用ORM。很多人使用ORM进行迭代开发。 –