0

以下のコードには、2 人が同時に送信した場合に間違った s.saleID が取得されるというリスクはありますか?

        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();
    }
}

もしそうなら、それがアトミックであることを確認するにはどうすればよいですか? (大丈夫だと思いますが、再確認したいです!)

4

1 に答える 1

0

submitSaleを 2 回以上呼び出すテストを作成し、ほぼ同時に変更を送信するようにします。テストが失敗する場合は、lockステートメントを使用しますが、注意してください。デッドロックが発生する可能性があります。submitSaleを変更した後、高負荷 (多数の同時呼び出し) で再度テストするだけです。などなど、試験に合格するまで。

于 2012-06-11T16:04:46.537 に答える