SmartPersistenceLayer 2.0(5) ---事务处理篇
SmartPersistenceLayer 2.0 之事务处理篇
常规
在我们的平时业务中,事务操作已经是一个必不可少的内容.SPL在事务处理方面功能很强:
1. 多数据库操作功能:
在事务中添加事务子项,各事务子项可以对应于不同的数据库,事务将在自己的数据库中进行更新.
2. 事务子项的多类型:
在事务中可以添加实体操作[Entity],更新标准[UpdateCriteria],删除标准[DeleteCriteria]
Transaction t=new Transaction(); //实例化一个事务
t.AddSaveObject(student): //要新增或修改的实体
t.AddDeleteObject(student); //要删除的实体
t.AddDeleteCriteria(dc); //添加一个DeleteCriteria
t.AddUpdateCriteria(uc); //添加一个UpdateCriteria
t.AddSqlString(sqlString,dbName); //添加一个SQL执行语句
t.Process(); //执行此事务
通过以上的方式,可以在一个事务中处理各种各样的操作.
添加/修改实体AddSaveObject
在SPL的事务中,允许添加一个新增/修改实体,例子如下:
Transaction t=new Transaction();
StudentEntity student=new StudentEntity(); //这是要新增的实体
student.Id=2;
student.Name=”abu”;
t.AddSaveObject(student); //添加要新增的实体到事务中
StudentEntity student2=new StudentEntity();
student2.Id=1;
student2.Retrieve();
if(student2.IsPersistence)
{
student2.Name=”TintownUpdate”;
t.AddSaveObject(student2); //添加要修改的实体到事务中
}
t.Process(); //事务执行
上面的代码可以实现新增student实体与更新student2实体.
AddSaveObject()会根据实体自身的IsPersistence进行新增和修改,这类似于实体本身的Save方法.
在新增与更新事务中,同样可以捕捉到主键冲突和级联更新约束异常,可以参考实体Entity部分处理。
如果实体是IsSaveToMemory=true,则在进行事务处理后,自动更新内存.
删除实体AddDeleteObject
在SPL的事务中,允许添加一个删除实体,例子如下:
Transaction t=new Transaction();
StudentEntity student=new StudentEntity();
student.Id=1;
student.Retrieve();
if(student.IsPersistence)
{
t.AddDeleteObject(student);
}
try
{
t.Process();
}catch(PlException exp)
{
if(exp.ErrorType==ErrorTypes. RestrictError)
Response.Write();
else
throw exp;
}
在事务处理中同样可以捕捉到“级联删除约束”异常,进行友好提示。
如果实体的IsSaveToMemory=true,则在删除后会自动更新内存.
删除标准AddDeleteCriteria
在SPL事务中,可以添加删除标准,例子如下:
Transaction t=new Transaction();
DeleteCriteria dc=new DeleteCriteria(typeof(StudentEntity));
dc.GetNewCondition().AddEqualTo(StudentEntity.Name,”tintown”);
t.AddDeleteCriteria(dc);
t.Process();
同样可以捕捉到级联删除约束异常,参考DeleteCriteira的处理。
如果实体的IsSaveToMemory,则会自动更新到内存.
更新标准AddUpdateCriteria
在SPL的事务中可以添加更新标准,例子如下:
Transaction t=new Transaction ();
UpdateCriteria uc=new UpdateCriteria(typeof(StudentEntity));
uc.AddAttributeForUpdate(StudentEntity.NAME,"bbb");
uc.GetNewCondition().AddEqualTo(StudentEnity.Name,”tintown”);
t.AddUpdateCriteria(uc);
t.Process();
同样可以捕捉到级联更新约束异常,参考UpdateCriteira的处理方式
如果实体的IsSaveToMemory=true,则会自动更新到内存.
SQL语句事务处理
在SPL中,不可能覆盖所有的数据库操作,为了扩展,提供了SQL语句的事务处理,例子如下:
Transaction t=new Transaction();
string sqlString=”update student set Name=’tintown’ where id=1”;
string dbName=”DB2”
t. AddSqlString(sqlString,dbName);
….
t.Process();
通过这种SQL语句的事务处理,可以解决SPL所不能覆盖的方面,dbName为SPL中的数据源名称.注意:如果实体是IsSaveToMemory的话,那么使用SQL更新此实体后,将无法影响到内存中的数据,所以对于内存存储的表,请使用SPL操作的操作。
其他
Transaction的Clear()方法可以清除所有的事务处理对象
Count属性可以得到当前事务处理对象条数
听棠
2004年11月
MSN:tintown_liu@hotmail.com