ADN Open CIS
Сообщество программистов Autodesk в СНГ

23/08/2013

Две типичных ошибки работы с транзакциями

Возможно, это вырастет в целую серию о типичных ошибках.

Моя последняя статья была об обработке прерываний, и Adam написал замечание о неизвестных командах. Теперь две наиболее типичных ошибки людей работающих с транзакциями, когда они только начали использовать AutoCAD .NET API, которые могут потратить много часов для отладки и будут чувствовать себя крайне глупо, когда поймут в чем причина.

Забывчивость в подтверждении (Commit) транзакции

Однажды я потратил время, как молодой и неопытный AutoCAD .NET программист, пытаясь понять, почему примитивы, которые я пытался добавить в базу чертежа не были там после того как мой код выполнялся. Проблема оказалась в том, что я просто забыл вызвать Transaction.Commit() прежде чем я удалил транзакцию. Неподтвержденная транзакция прерывается и тогда, все изменения, внесенные в базу чертежа, откатываются в состояние до начала транзакции.

Это первая вещь, которую следуют проверять, когда то, что вы ожидаете было добавлено вашим кодом в базу чертежа, там отсутствует.

Забывчивость в завершении (Dispose) транзакции

Если вы забыли завершить транзакцию, то типичным симптомом при возврате управления AutoCAD’у будут странности в графическом редакторе. Чаще всего добавленные в транзакции примитивы не появятся на экране, а при выходе из AutoCAD появится диалог ошибки или в окне  Visual Studio Output будет ненулевой код возврата acad.exe. Лучший способ для того, чтобы завершать транзакцию – использовать оператор Using. Так пример использования выглядит в VB.NET:

Код - VB.NET: [Выделить]
  1.     <CommandMethod("MyCommand")> _
  2.     Public Sub MyCommand()
  3.       Using tr As Transaction = db.TransactionManager.StartTransaction
  4.         ' тут наши действия…
  5.         tr.Commit()
  6.       End Using
  7.     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