一、几个关于事务管理器的问题
1、Transaction对象,要放在Using语句里面使用,因为它自身也需要dispose。
2、如果只是查询信息,就不需要提交或回滚
3、非Using语句开启事务,最好调用commit方法,ent.dispose也需要调用。结束事务需要调用 Dispose()方法,调用commit没有负面影响,不调用commint或者abort,在环境里面虽然看不出什么影响,但transaction对象不是这么用的,会严重影响运行速度
4、在事务期间打开的所有对象在事务结束时都会被关闭。
5、如果使用了.net 语言中的 Using 和 End Using 关键字来表示事务的开始和结束,就不需要调用 Dispose()方法。
6、在关闭事务之前,应使用 Commit()方法提交所作的任何修改。在关闭事务前,如果没有提交修改,那么可以将任何修改回滚到事务启动之前的状态
二、使用事务管理器管理事务
1、启动事务之后,我们就可以用 GetObject()方法打开对象。
2、创建及添加到数据库的任何新对象也应同时调用 AddNewlyCreatedDBObject()方法将其添加到事务
3、对象编辑完并添加到数据库后,可以使用事务对象的 Commit()方法保存对数据库的修改并关闭所有打开的对象
4、事务处理完毕后,调用 Dispose()方法关闭事务
三、升级打开对象与降级打开对象
1、我们可以使用 UpgradeOpen()方法与DowngradeOpen()方法改变对象当前的打开模式
2、不必为每个UpgradeOpen()调用都配上一个 DowngradeOpen()调用,因为对象或事务的关闭能将实体的打开状态充分地清理干净
3、当只是查询一个对象时,就不要以写模式打开。以读模式打开对象并查询其属性比以写模式打开对象并查询效率高得多
4、以写模式打开对象会启动该对象的撤销登记。撤销登记用来跟踪对象的修改,这样,所做的任何修改都能被回滚
5、如果不能确定是否需要修改对象,最好以读模式打开对象,然后在需要时再升级为写模式。这样做能帮助减少程序开销
四、事务的嵌套(事务的嵌套是指在一个事务的边界当中嵌入另一个事务,事务管理器会将事务保存在堆栈中,最近的事务在堆栈顶部可以通过 TransactionManager.TopTransaction()方法获得)
1、里层的事务可以使用外层事务打开的对象
2、如果最里层的事务终止了,则在此事务内的所有对象操作将取消,对象返回到此事务开始时候得状态,对象指针也将不再可用。
3、事务嵌套使用的时候必须一层一层的提交,而且必须父层的事务提交后,子层的事务才能生效,否则退回。