В настоящее время я разрабатываю проект, в котором DAL реализуется в .Net с использованием ADO Entity Framework.
Структура БД не проста, и я хотел бы быть в состоянии обеспечить выполнение некоторых операций с БДявляются атомарными.
Я знаю, что вы можете сделать это, создав STORED PROCEDURE
и используя DB TRANSACTION
(как упомянуто в в этом сообщении ).(Я использую SQL Server)
Дело в том, что я хотел бы максимально сохранить логику на стороне программного обеспечения, и я подумывал об использовании .Net TransactionScope
.Хотя я понимаю, что он работает хорошо с точки зрения программного обеспечения (ничего не передается в БД, пока не будет зафиксирован весь объем), я сомневаюсь, что он все еще обеспечивает атомарное выполнение БД.
Кто-нибудь знает об этом?
Точнее говоря, обычно код будет выглядеть следующим образом:
using (TransactionScope scope = new TransactionScope())
{
/*
* Do some opreations such as reads, write, insert, deletes
*/
scope.Commit()
}
Я хотел бы убедиться, что все, что в скобках, выполняется "атомарно" (изоляция = SERIALIZABLE IУгадай).Под этим я подразумеваю, что я не хочу, чтобы состояние БД могло изменяться во время выполнения кода в области.