Transaction Scope锁定数据库

时间:2017-02-16 12:14:36

标签: c# linq-to-sql ado.net transactionscope

我在一次调用中将数据插入两个表时使用了事务范围。但是事务范围持有数据库或锁定数据库以用于特定范围,而另一个用户无法对数据库执行任何操作。所以请告诉我避免这种情况的替代解决方案。

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

1 个答案:

答案 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

但在您使用之前请先考虑一下:隔离级别是好东西。它有助于使您的数据保持稳定状态。忽略它会导致各种奇怪的错误。您的数据库有巨大的力量可以帮助您,不要因为看起来很难正确而将其关闭。