我想从具有最早日期和计数器>的行中减去0,当它达到0时,我想从具有相同itemId的下一个最旧的行中减去,并在其他表上做一些其他更新。
我的问题是,如果有更好的方法,如果我的代码效率不高。如果它崩溃了,代码会回滚吗?我需要尝试/捕获吗?如果有任何建议,请提供一些代码。 这是我的代码:
public static int insertOrder(Order order)
{
using (var db = new AWarehouseDataClassesDataContext())
{
using (TransactionScope ts = new TransactionScope())
{
tblOrder row = generateOrderToBeInserted(order);
db.tblOrders.InsertOnSubmit(row);
db.SubmitChanges();
order.orderId = row.OrderId;
foreach(var x in order.insertList)
{
int qt = x.qty;
while (qt > 0)
{
var line = db.tblInsertLines.First(r => r.ItemId == x.itemId && r.Counter > 0);
int c = line.Counter;
for (int a = c; a > 0 && qt > 0; a--)
{
line.Counter = line.Counter - 1;
qt--;
}
db.SubmitChanges();
}
tblOrderLine orderLine = generateOrderLine(order, x);
db.tblOrderLines.InsertOnSubmit(orderLine);
db.SubmitChanges();
var item = db.tblItems.Single(i => i.ItemId == x.itemId);
item.Qty = item.Qty - x.qty;
item.LastUpdate = order.orderDate;
item.UpdatedBy = order.user;
db.SubmitChanges();
}
ts.Complete();
return order.orderId;
}
}
}