多次SubmitChanges的风险是什么?

时间:2012-06-10 23:46:04

标签: linq-to-sql

以下代码是否存在风险?如果两个人同时提交错误的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();
    }
}

如果是这样,我该怎么做以确保它是原子的? (我认为应该没问题,但要仔细检查!)

1 个答案:

答案 0 :(得分:0)

要确保只需编写一个测试来调用 submitSale 2甚至更多次,并使其几乎同时提交更改。如果测试失败,请使用 lock 语句,但请注意,它可能会导致死锁。更改 submitSale 后,只需高负载再次测试(大量同时调用)。等等,直到通过测试。