1) Можно ли открывать и закрывать транзации в цикле foreach или for?
2) Можно ли обращаться к BlockTable BlockTableRecord в цикле foreach или for?
Мой случай: открытая транзакция tr1, в ней создаю список List<PolyLine> lstPLN = ...
далее в цикле
using (Transaction tr1= Doc.TransactionManager.StartTransaction())
{...
foreach(var item in lstPLN )
{
CreatePln(item);
}
...
tr.Commit();
}
static void CreatePln(Polyline acPoly)
{
// Start a transaction
using (Transaction tr = Doc.TransactionManager.StartTransaction())
{
// Open the Block table for read
BlockTable acBlkTbl;
acBlkTbl = tr.GetObject(StaticVariables.SV.acDB.BlockTableId,
OpenMode.ForRead) as BlockTable;
// Open the Block table record Model space for write
BlockTableRecord acBlkTblRec;
acBlkTblRec = tr.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
OpenMode.ForWrite) as BlockTableRecord;
// Add the new object to the block table record and the transaction
acBlkTblRec.AppendEntity(acPoly);
tr.AddNewlyCreatedDBObject(acPoly, true);
tr.Commit();
}
}
Ошибка выскакивает Autodesk.AutoCAD.Runtime.Exception: eAlreadyInDb
Почитал вроде транзакции из цикла нужно убирать?