2012-06-10 27 views
0

下面的代碼是否存在風險,如果兩個人同時提交錯誤的s.saleID將被檢索?多次SubmitChanges有什麼風險?

 protected void submitSale(int paymentTypeID) 
    { 
     tadbDataContext tadb = new tadbDataContext(); 

     ta_sale s = new ta_sale(); 

     decimal total = decimal.Parse(lblTotal.Value); 

     s.paymentTypeID = paymentTypeID; 
     s.time = DateTime.Now; 
     s.totalSale = total; 
     tadb.ta_sales.InsertOnSubmit(s); 
     tadb.SubmitChanges(); 

     char[] drinksSeparator = new char[] {'|'}; 
     char[] rowSeparator = new char[] { ':' }; 
     string drinkString = lblSummaryQty.Value.Substring(0, lblSummaryQty.Value.Length - 1); 
     string[] arrDrinks = drinkString.Split(drinksSeparator); 


     foreach (string row in arrDrinks) 
     { 
      string[] arrDrink = row.Split(rowSeparator); 
      int rowID = Convert.ToInt16(arrDrink[0]); 
      int rowQty = Convert.ToInt16(arrDrink[1]); 

      ta_saleDetail sd = new ta_saleDetail(); 
      sd.drinkID = rowID; 
      sd.quantity = rowQty; 
      sd.saleID = s.saleID; 
      tadb.ta_saleDetails.InsertOnSubmit(sd); 
     } 

     tadb.SubmitChanges(); 
    } 
} 

如果是這樣,我該怎麼做以確保它是原子? (我想應該是美好的,但要仔細檢查!)

回答

0

要舒爾它的確定只寫一個測試調用submitSale 2甚至更多次,並使其在幾乎提交更改同時。如果測試失敗,請使用聲明,但要小心,它可能導致死鎖。改變後submitSale只需再次測試高負載(很多同時調用)。等到你通過測試。