Я пытаюсь найти пример реализации шаблона Unit Of Work в Simple.Data. Кто-нибудь есть? В настоящее время я использую не общие репозитории, и мне сказали, что выполнение UoW - это что-то делать.
Простая сборка данных
Ответ 1
Если то, что вы хотите от Единицы работы, представляет собой набор операций вставки/обновления/удаления, охватываемых транзакцией, то это поддерживается:
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, поэтому вы можете взять копию записи сразу после ее выбора и использовать ее для сравнение при сохранении задний. Я скоро выпущу релиз с поддержкой метода обновления (текущего, оригинального), который будет делать оптимистичные обновления concurrency.