愿你出走半生,归来仍是少年!
目录
在Object Arx开发中,涉及到对对象的编辑、创建时,事务处理是不可或缺的一部分基础工。
当使用事务时,您可以决定何时将对象的更改保存到绘图数据库。可以使用Commit方法保存对事务中打开的对象所做的更改。如果程序遇到错误,可以使用Abort方法回滚事务中所做的任何更改。
如果在调用Dispose之前没有调用Commit,则会回滚事务中所做的所有更改。无论调用Commit还是Abort,都需要调用Dispose来发出事务结束的信号。如果事务对象以Using语句启动,则不必调用Dispose。
1. 如何创建
// 获取当前的文档
Document doc = Application.DocumentManager.MdiActiveDocument;
// 获取库
Database db = doc.Database;
//获取编辑器
Editor editor = Application.DocumentManager.MdiActiveDocument.Editor;
using (Transaction trans = db.TransactionManager.StartTransaction())
{
}
2. 提交或终止
2.1 提交
通过Transaction类的Commit方法,可提交在事务期间打开的所有DBObjects中所做的更改,然后关闭它们。
public virtual void Commit();
2.2 终止
通过Transaction类的Abort方法,可终止事务。
public virtual void Abort();
事务正常运行到最后时都用进行提交,若未执行Commit()那么事务释放后会自动回滚之前的是事务操作,代表白做了那些操作。
3. 对象获取
通过Transaction类的GetObject方法,可获取到对象。
public virtual DBObject GetObject(
ObjectId id,
Autodesk.AutoCAD.DatabaseServices.OpenMode mode
);
其中id代表对象在CAD中ID,mode代表打开方式。通常在前面使用OpenMode.ForRead,后面需要进行编辑时通过DbObject的UpgradeOpen()方法进行权限提升,变更为编辑。可参考4. 图层操作(持续更新)_就是那个帕吉的博客-CSDN博客中针对图层记录对象那里的代码进行理解。
4. 嵌套
事务可以一个嵌套在另一个事务中。在实际开发中可能有一个外部事务来撤消例程所做的所有更改,而内部事务只撤消所做更改的一部分。当使用嵌套事务时,从一个顶级事务开始,它也是最外层的事务。
当启动新事务时,它们将被添加到前一个事务中。嵌套事务必须按照与它们创建顺序相反的顺序提交或终止。因此,如果有三个事务,必须在第二个和最后一个事务之前关闭第三个或最里面的一个事务。如果中止了第一个事务,那么所有三个事务所做的更改都将撤消。
下图显示嵌套时事务的显示方式: