| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Базы данных под .NET > Откат транзакции |
| Автор: mr.Anderson 24.12.2010, 16:10 | ||||
При работе с БД через Entities существует возможность открыть транзакцию, не вызывая метод AcceptAllChanges() у объекта класса ObjectContext. К примеру, так:
В результате получим открытую транзакцию, которую можно будет воплотить в реальность, вызвав тот самый AcceptAllChanges(). Вопрос такой: а как откатить эту транзакцию по требованию пользователя? В http://msdn.microsoft.com/en-en/library/bb336792(v=VS.90).aspx я нашел следующее:
То есть, пока я вижу только один способ реализации метода отката транзакции - это попытка затолкать в базу нечто, что там уже существует. А есть менее корявые методы? |
| Автор: Экскалупатор 24.12.2010, 16:18 |
| а если просто закрыть транзакцию не вызывая метод AcceptAllChanges()? |
| Автор: jonie 24.12.2010, 19:09 | ||
| а я вот не понял зачем так делать вообще.. чем плохо:
собственно я думаю можно вернуть эту tr, не вызывая Dispose() для неё... |
| Автор: mr.Anderson 25.12.2010, 10:02 | ||
| Экскалупатор, жуть как логично. Вопрос состоял в том, каким образом это сделать)) Появилась еще идея создать на сервере хранимую процедуру, описать ее как-то так:
И потом звать ее, когда понадобится. Вопрос, повлияет ли это корректно на состояние объекта ObjectContext. Добавлено через 8 минут и 13 секунд Поглядел TransactionScope, там есть возможность завершить транзакцию и завершить с индикацией, что все, произошедшее внутри транзакции, выполнено корректно. Значит, как я понял, вызов Dispose() не будет откатывать изменения? А просто "проинформирует" об этом? Вопрос об откате транзакции все еще открыт. |
| Автор: jonie 25.12.2010, 11:43 | ||
с хранимками не прокатит, по крайней мере в MSSQL, почитайте про scope-ы |
| Автор: Экскалупатор 25.12.2010, 13:29 |
| а почему это не подходит? открыл книгу про ADO.NET, раздел транзакции, там написано: "транзакция фиксируется или откатывается с помощью метода Commit или Rollback объекта транзакции". http://msdn.microsoft.com/ru-ru/library/ms181299.aspx http://msdn.microsoft.com/ru-ru/library/system.transactions.transaction.rollback.aspx |
| Автор: jonie 25.12.2010, 23:38 |
| Экскалупатор, при чем там ado.net ? Если у вас например MSSQL надо читать про scope (область применения) ... в общем на sql.ru и в книгах лучше пояснят. |