У меня есть следующие коды с блоком транзакции. Когда я размещаю заказ, моя базовая таблица (TBL_T_Orders
) всегда вставляет 2 одинаковые строки (повторяющиеся строки с разными OrderId
). Таблица подробностей TBL_T_OrderItems
правильно вставила элементы.
Мой код
public CartTotal InsertNewOrder(CartTotal cartTotal)
{
try
{
con.Open();
transaction = con.BeginTransaction();
string orderQuery = @"INSERT INTO [dbo].[TBL_T_Orders] ([OrderCode],[OrderReceivedDate])
OUTPUT INSERTED.OrderId
VALUES (@OrderCode, @OrderReceivedDate)";
cmd = db.GetSqlStringCommand(orderQuery);
cmd.Transaction = transaction;
db.AddInParameter(cmd, "OrderCode", DbType.Int32, cartTotal.OrderCode);
db.AddInParameter(cmd, "OrderReceivedDate", DbType.DateTime,DateTime.Now);
db.ExecuteNonQuery(cmd, transaction);
int OrderId = (int)cmd.ExecuteScalar();
foreach (var item in cartTotal.items)
{
string orderItemsQuery = @"INSERT INTO [dbo].[TBL_T_OrderItems] ([OrderId], [ItemId]
VALUES (@OrderId, @ItemId)";
cmd = db.GetSqlStringCommand(orderItemsQuery);
cmd.Transaction = transaction;
db.AddInParameter(cmd, "OrderId", DbType.Int32, OrderId);//temp
db.AddInParameter(cmd, "ItemId", DbType.String, item.ItemId);
db.ExecuteNonQuery(cmd, transaction);
}
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
throw ex;
}
finally
{
con.Close();
}
return cartTotal;
}