Транзакция в цикле

Автор Тема: Транзакция в цикле  (Прочитано 433 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн RevitTormentorАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 126
  • Карма: 3
Транзакция в цикле
« : 14-01-2018, 19:58:35 »
1) Можно ли открывать и закрывать транзации в цикле foreach или for?
2) Можно ли обращаться к BlockTable BlockTableRecord в цикле foreach или for?

Мой случай: открытая транзакция tr1, в ней создаю список List<PolyLine> lstPLN = ...

далее в цикле
Код - C# [Выбрать]
  1.             using (Transaction tr1= Doc.TransactionManager.StartTransaction())
  2.             {...
  3. foreach(var item in lstPLN )
  4. {
  5. CreatePln(item);
  6. }
  7. ...
  8. tr.Commit();
  9. }
  10.  

Код - C# [Выбрать]
  1. static void CreatePln(Polyline acPoly)
  2.         {  
  3.             // Start a transaction
  4.             using (Transaction tr = Doc.TransactionManager.StartTransaction())
  5.             {
  6.                 // Open the Block table for read
  7.                 BlockTable acBlkTbl;
  8.                 acBlkTbl = tr.GetObject(StaticVariables.SV.acDB.BlockTableId,
  9.                                              OpenMode.ForRead) as BlockTable;
  10.  
  11.                 // Open the Block table record Model space for write
  12.                 BlockTableRecord acBlkTblRec;
  13.                 acBlkTblRec = tr.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  14.                                                 OpenMode.ForWrite) as BlockTableRecord;
  15.      
  16.                 // Add the new object to the block table record and the transaction
  17.                 acBlkTblRec.AppendEntity(acPoly);
  18.                 tr.AddNewlyCreatedDBObject(acPoly, true);
  19.                
  20.                 tr.Commit();
  21.             }
  22.         }
  23.  

Ошибка выскакивает Autodesk.AutoCAD.Runtime.Exception: eAlreadyInDb
Почитал вроде транзакции из цикла нужно убирать?

Отмечено как Решение RevitTormentor 14-01-2018, 20:24:12

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1664
  • Карма: 398
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Re: Транзакция в цикле
« Ответ #1 : 14-01-2018, 20:17:49 »
Autodesk.AutoCAD.Runtime.Exception: eAlreadyInDb
Объект уже есть в базе данных чертежа. Видимо, речь идёт об объекте acPoly. lstPLN каким образом получен?