以前發表了一篇事務的存儲過程,最近在作項目的時候遇到分佈式事務,全部總結一下,跟你們分享和交流一下經驗。首先說明爲何要分佈式事務呢?先說說我在項目的哪裏遇到分佈式事務吧,我是在作網站後臺開發的時候,通常涉及到有圖片表的設計時,數據庫存放的是圖片的路徑,圖片是存放在網站的文件夾下面,因此咱們操做產品表時,當我要刪除數據庫產品圖片路徑,同時要把存在網站目錄下的圖片也刪掉,爲了實現這功能,我就使用了分佈式事務。數據庫
思路:分佈式
一、在項目中必須引用 System.Transactions 程序集網站
二、在須要進行事務管控的代碼方法:System.Transactions.TransactionScope scop = new System.Transactions.TransactionScope()url
三、必須啓動服務 Distributed Transaction Coordinator才能進行分佈式事務的正常運行spa
下面是我寫的一個例子主要代碼:設計
1 //3.根據id將數據庫和文件夾的圖片一塊兒刪掉 2 3 //3.0根據id獲得實體對象 4 ProductEntity entity = Product_BLLSub.Get_ProductEntity(int.Parse(id)); 5 //3.1建立一個事務 6 using (System.Transactions.TransactionScope scop = new System.Transactions.TransactionScope()) 7 { 8 //3.2刪除數據庫圖片的數據 9 Product_BLLSub.Create_ProductDelete(int.Parse(id)); 10 12 //3.3獲得圖片的路徑 13 string thumphyPath = context.Server.MapPath("/upload/thum/") + entity.img_url; 14 string imgPhyPath = context.Server.MapPath("/upload/img/") + entity.img_url; 15 //3.4刪除縮略圖 16 if (System.IO.File.Exists(thumphyPath)) 17 { 18 System.IO.File.Delete(thumphyPath); 19 } 20 //3.5刪除原圖 21 if (System.IO.File.Exists(imgPhyPath)) 22 { 23 System.IO.File.Delete(imgPhyPath); 24 } 25 //3.6提交事務 26 scop.Complete(); 27 } 28 35 //刪除成功 36 Response.Write("刪除成功");
說明:我操做數據庫的方法是將數據庫數據取出來轉換成實體對象,而後經過操做實體對象來操做數據庫。code