最近在做项目的时候遇到分布式事务,所有总结一下,跟大家分享和交流一下经验。首先说明为什么要分布式事务呢?先说说我在项目的哪里遇到分布式事务吧,我是在做网站后台开发的时候,一般涉及到有图片表的设计时,数据库存放的是图片的路径,图片是存放在网站的文件夹下面,所以我们操作产品表时,当我要删除数据库产品图片路径,同时要把存在网站目录下的图片也删掉,为了实现这功能,我就使用了分布式事务。
思路:
1、在项目中必须引用 System.Transactions 程序集
2、在需要进行事务管控的代码方法:System.Transactions.TransactionScope scop = new System.Transactions.TransactionScope()
3、必须启动服务 Distributed Transaction Coordinator才能进行分布式事务的正常运行
下面是我写的一个例子主要代码:
//根据id将数据库和文件夹的图片一起删掉
//根据id得到实体对象
ProductEntity entity = Product_BLLSub.Get_ProductEntity(int.Parse(id));
//创建一个事务
using (System.Transactions.TransactionScope scop = new System.Transactions.TransactionScope())
{
//删除数据库图片的数据
Product_BLLSub.Create_ProductDelete(int.Parse(id));
//得到图片的路径
string thumphyPath = context.Server.MapPath("/upload/thum/") + entity.img_url;
string imgPhyPath = context.Server.MapPath("/upload/img/") + entity.img_url;
//删除缩略图
if (System.IO.File.Exists(thumphyPath))
{
System.IO.File.Delete(thumphyPath);
}
//删除原图
if (System.IO.File.Exists(imgPhyPath))
{
System.IO.File.Delete(imgPhyPath);
}
//提交事务
scop.Complete();
}
//删除成功
Response.Write("删除成功");
说明:我操作数据库的方法是将数据库数据取出来转换成实体对象,然后通过操作实体对象来操作数据库。
转载于:https://blog.51cto.com/kingrain/1547382
网站后台开发分布式事务经验分享
博主在网站后台开发涉及图片表设计时遇到分布式事务,如删除数据库产品图片路径时需同时删除网站目录下图片。分享了实现思路,包括引用程序集、使用事务管控代码方法,还指出需启动特定服务,最后给出操作数据库的示例说明。
638

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



