我在一次调用中将数据插入两个表时使用了事务范围。但是事务范围持有数据库或锁定数据库以用于特定范围,而另一个用户无法对数据库执行任何操作。所以请告诉我避免这种情况的替代解决方案。
using (TransactionScope scope = new TransactionScope())
{
CamphorTray_OrderDetails ct = new CamphorTray_OrderDetails();
ct.CamphorTray_ID = ctv.CamphorTray_ID;
ct.Temple_ID = ctv.Temple_ID;
ct.For_Date = ctv.For_Date;
ct.Deity = ctv.Deity;
ct.Note_Cash = ctv.Note_Cash;
ct.Coin = ctv.Coin;
ct.Total_amount = ctv.Total_amount;
ct.Created_By = ctv.Created_By;
ct.Created_Date = DateTime.Now;
ct.Modified_By = ctv.Created_By;
ct.Modified_Date = DateTime.Now;
CTOD.Insert(ct);
InsertAudit_CamphorTray_OrderDetails(ct, "Insert");
scope.Complete();
}
答案 0 :(得分:2)
其他用户访问您的交易数据的能力以及您访问他们和数据库的能力。尝试确保此工作(通过锁定表和/或行)可以由public override bool AcceptDrop(NSTableView tableView, NSDraggingInfo info, nint row, NSTableViewDropOperation dropOperation)
{
var rowData = info.DraggingPasteboard.GetDataForType(typeof(Product).FullName);
if (rowData == null)
return false;
var dataArray = NSKeyedUnarchiver.UnarchiveObject(rowData) as NSIndexSet;
NSAnimationContext.BeginGrouping();
NSAnimationContext.CurrentContext.Duration = 1;
foreach (var originalIndex in dataArray.ToArray())
{
tableView.MoveRow((nint)originalIndex, row);
}
NSAnimationContext.EndGrouping();
return true;
}
控制。
例如,这将是最不安全的,但可能是大多数"允许"方式:
TransactionOptions
但在您使用之前请先考虑一下:隔离级别是好东西。它有助于使您的数据保持稳定状态。忽略它会导致各种奇怪的错误。您的数据库有巨大的力量可以帮助您,不要因为看起来很难正确而将其关闭。