Две типичных ошибки работы с транзакциями
Возможно, это вырастет в целую серию о типичных ошибках.
Моя последняя статья была об обработке прерываний, и Adam написал замечание о неизвестных командах. Теперь две наиболее типичных ошибки людей работающих с транзакциями, когда они только начали использовать AutoCAD .NET API, которые могут потратить много часов для отладки и будут чувствовать себя крайне глупо, когда поймут в чем причина.
Забывчивость в подтверждении (Commit) транзакции
Однажды я потратил время, как молодой и неопытный AutoCAD .NET программист, пытаясь понять, почему примитивы, которые я пытался добавить в базу чертежа не были там после того как мой код выполнялся. Проблема оказалась в том, что я просто забыл вызвать Transaction.Commit() прежде чем я удалил транзакцию. Неподтвержденная транзакция прерывается и тогда, все изменения, внесенные в базу чертежа, откатываются в состояние до начала транзакции.
Это первая вещь, которую следуют проверять, когда то, что вы ожидаете было добавлено вашим кодом в базу чертежа, там отсутствует.
Забывчивость в завершении (Dispose) транзакции
Если вы забыли завершить транзакцию, то типичным симптомом при возврате управления AutoCAD’у будут странности в графическом редакторе. Чаще всего добавленные в транзакции примитивы не появятся на экране, а при выходе из AutoCAD появится диалог ошибки или в окне Visual Studio Output будет ненулевой код возврата acad.exe. Лучший способ для того, чтобы завершать транзакцию – использовать оператор Using. Так пример использования выглядит в VB.NET:
- <CommandMethod("MyCommand")> _
- Public Sub MyCommand()
- Using tr As Transaction = db.TransactionManager.StartTransaction
- ' тут наши действия…
- tr.Commit()
- End Using
- End Sub
Источник: http://adndevblog.typepad.com/autocad/2012/05/two-common-mistakes-with-transactions.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=186
Опубликовано 23.08.2013Отредактировано 23.11.2015 в 12:06:32