1 Transaction介绍
一般而言数据库的增删改查操作统一交给Transaction(事务)处理,AutoCAD也不例外,它将所有对象以图形数据库的形式存储,并将对象的打开和关闭交给唯一的TransactionManager进行管理,因此TransactionManager必须是一个全局对象,且随AutoCAD启动而创建,并管理多个被AutoCAD打开的dwg文档。

存储在硬盘的dwg文档里面的每个对象都要有一个唯一的编号Handle,这样才被AutoCAD正确索引。而被Transaction Manager从硬盘取出放入内存的对象也会被重新分配一个唯一的编号ObjectId,它本质是一个内存地址,有了这个地址我们在代码里面就可以访问到这个对象。

TransactionManager简化了数据库的存储操作,使对象的增删改查主要涉及4个函数:StartTransaction、GetObject、AddNewlyCreatedDBObject、Commit。其中StartTransaction函数是获得Transaction对象的唯一入口,当添加新的对象到内存并得到一个与之关联的ObjectId后,还需要调用AddNewlyCreatedDBObject函数通知TransactionManager,使后续将要被调用的Commit函数将对象存入硬盘,并为该对象分配Handle。

一段简单的添加对象的代码如下:
/// <summary>
/// 添加表记录(BlockTable DimStyleTable LayerTable LinetypeTable RegAppTable TextStyleTable UCSTable ViewportTable ViewTable)
/// </summary>
/// <param name="symbolTableRecord"></param>
/// <param name="symbolTableId"></param>
/// <returns></returns>
private static ObjectId AddSymbolTableRecord(SymbolTableRecord symbolTableRecord, ObjectId symbolTableId)
{
using (Transaction tr =

本文介绍了AutoCAD.net中Transaction的使用,特别是针对数据库操作的增删改查。通过TransactionManager管理对象,利用StartTransaction、GetObject、AddNewlyCreatedDBObject和Commit等函数实现图形数据库的管理。文章通过一个实例展示了如何使用Transaction绘制建筑制图中的标高符号,该符号由三角形、水平线和文字组成,并讨论了在添加AttributeReference时需要考虑与BlockReference的关联问题。
最低0.47元/天 解锁文章
2746

被折叠的 条评论
为什么被折叠?



