Здравствуйте, krupoderov, Вы писали:
K>В случае транзакции мы просто откатываем и объект.
Просто? Просто не получится. Давайте рассмотрим такой сценарий:
Smth = db.SelectByKey(); // Smth.Key = Шило.
db.BeginTransaction();
Smth.Key = Мыло
db.Update(); // Шило => Мыло
db.Transaction.Save("SavePoint");
Smth.Key = Водка
db.Update(); // Мыло => Водка
db.Transaction.Rollback("SavePoint"); Водка => Мыло
Smth.Key = Носки
db.Update(); // Мыло => Носки
db.RollbackTransaction(); Носки => Шило
Т.е. нужно хранить предудущее значение и
стек значений для каждой
вложенной транзакции. И при откате находить в этом стеке нужные значения.
Причём логика первый пришёл — последний ушёл тут не годится. Вот такой код вполне корректен:
db.BeginTransaction("Transaction");
// ...
db.Transaction.Save("SavePoint");
// ...
db.RollbackTransaction("Transaction");
SavePoint просто идёт в лес. И в приведённом выше примере откат должен произойти сразу на Шило, минуя Мыло.
Сейчас транзакции в BLToolkit'е не имеют save point'ов. Хотя и SqlTransaction и OracleTransaction их имеют.
Но это не значит, что Игорь их туда никогда не добавит

... << RSDN@Home 1.2.0 alpha rev. 642>>