当前位置:编程学习 > C#/ASP.NET >>

组件间的事务处理机制

假设有两个程序集,
一个处理数据保存的功能,(如其中有一个方法SaveDatabase(Entity entity),将数据保存到数据库中。可理解为数据保存组件.
第二个处理处理保存文件的功能。(其中有一个方法SaveFile(string file),将字符串写到对应的磁盘文件中,可理解为文件保存组件.

两个程序集没有直接关系。

现有一个程序集调用以上两个组件中的方法

Void Operate()
{
    //想在此处增加事务管理,要么都执行,要么都回滚。达到组件间的事务处理
    调用程序集2.SaveFile("Test");
    调用程序集1.SaveDatabase(obj);  
}


以上如何处理,如果都是保存数据库的话,使用数据connection中的事务,
TransactionScope似乎也是针对数据库的事务处理的,像以上既有数据库操作,又有文件操作的情况,如何使用事务。

请各位指点指点 组件事务 --------------------编程问答-------------------- 这种情况我们也有过,数据库保存成功,文件不一定保存(上传)成功,当然要保证成功率比较高.一般先保存数据库,如果数据库保存失败,就不上传文件.如果数据已经保存成功之路,而文件上传失败,可以通过修改数据的办法重新上传文件.

一般是在一个保存事件中完成,只要逻辑正确,一般不会存在数据保存成功,文件上传失败.
--------------------编程问答-------------------- google 事务 实现 两段提交 --------------------编程问答-------------------- 感觉两阶段提交的处理方法 协调者,参与者。很是复杂。

版主,你有没有例子参考呢?

分不够,可以再加分 --------------------编程问答-------------------- 你可以在捕获到异常之后,在try...catch的cache中,将文件删除掉。

你也可以先给文件保存为系统随机文件,然后执行数据库操作,然后再把文件由随机文件 MoveTo(...) 为正式文件。

你也可以先把文件保存为系统随机文件,然后执行数据库的操作但是不执行 DbTransaction.Commit,然后再把随机文件 MoveTo 为正式文件,然后再执行 DbTeansaction.Commit。

实际上所谓“两阶段”是个服务框架,并没有具体的内涵。需要你自己去实现。只要你保证第二阶段(如上面所说的:文件的MoveTo阶段和数据库事务的Commit阶段)执行起来非常快、失败率很低,可以保证都能同时受到执行命令,就行了!两阶段其是很简单,只不过微软并没有什么现成的代码让你直接调用,就是是TransactionScope也不过是一个空壳子,你需要填充上你自己编写的两阶段执行代码。 --------------------编程问答-------------------- 对于关系数据库的事务来说,如果失败,则数据会回滚(实际上许多系统并不回滚,直接丢掉日志即可)。

而对于你的文件操作来说,如果第二阶段执行之前也可以自动丢弃数据,那么就是两阶段了。因此先不保存为最终的正式文件,先保存了数据,然后简单地 MoveTo(...)操作(其实就是改一下文件名,这个操作很快而且基本上不会失败)。如果第二阶段没有执行,也不会保存正式文件名的那个文件,顶多就是多一些临时文件罢了。 --------------------编程问答-------------------- 统随机文件  -->  系统临时文件夹里的文件 --------------------编程问答-------------------- 保存文件的组件增加一个撤销最后一次操作的undo即可,
先保存文件,成功后保存数据库,如果数据库出错,undo文件
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,