我正在尝试在Simple.Data中找到工作单元模式的示例实现。有人有吗?我目前正在使用非通用存储库,并且被告知实现UoW是可以做的事情。
答案 0 :(得分:15)
如果你想从工作单位得到的是一组事务所涵盖的插入/更新/删除操作,那么就支持:
var db = Database.Open();
var tx = db.BeginTransaction(); // Internal IDbConnection opened by this call
try
{
order = tx.Orders.Insert(order); // Returned record will have new IDENTITY value
foreach (var item in items)
{
item.OrderId = order.Id;
tx.Items.Insert(item);
}
tx.Commit(); // Internal IDbConnection closed by this call...
}
catch
{
tx.Rollback(); // ...or this call :)
}
(注意:此代码假定您使用的是Ado适配器,而IDENTITY指的是SQL Server,但代码可以在任何Ado提供程序和任何支持事务的适配器上运行。)
如果您希望能够创建一批操作并一次性运行它们,那么目前不会直接支持这些操作,但我可以使用功能请求或补丁。
如果您正在对对象进行更改跟踪,那么可能有一点需要知道的是,从Simple.Data 0.9开始,SimpleRecord实现了ICloneable,因此您可以在选择后立即获取记录的副本并将其用于保存时的比较。我将很快推出一个版本,支持Update(当前,原始)方法,该方法将执行乐观并发更新。