Простая единица данных выполнения работ - PullRequest
13 голосов
/ 11 августа 2011

Я пытаюсь найти пример реализации шаблона Unit Of Work в Simple.Data. У кого-нибудь есть такой? В настоящее время я использую не универсальные репозитории, и мне сказали, что реализация UoW - это то, что нужно сделать.

1 Ответ

15 голосов
/ 12 августа 2011

Если вы хотите получить от единицы работы набор операций вставки / обновления / удаления, охватываемых транзакцией, то это поддерживается:

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 (текущий, оригинальный), который будет выполнять обновления с оптимистичным параллелизмом.

...