13

我试图在 Simple.Data 中找到工作单元模式的示例实现。有人有吗?我目前正在使用非通用存储库,并被告知要实施 UoW。

4

1 回答 1

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(current, original) 方法的版本,该方法将进行乐观并发更新。

于 2011-08-12T00:48:02.623 回答