[英]Transaction Scope locks database
在一次调用中将数据插入到两个表中时,我已使用事务作用域。 但是事务作用域持有数据库或将数据库锁定为特定作用域,这会使其他用户无法对数据库执行任何操作,因此请告诉我避免这种情况的替代解决方案。
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();
}
其他用户访问事务数据的能力以及您访问他们事务的能力以及数据库(通过锁定表和/或行)确保其有效的尝试可以由TransactionOptions
控制。
例如,这将是最不安全的方法,但可能是最“允许”的方法:
var options = new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted };
using (var tranScope = new TransactionScope(TransactionScopeOption.Required, options))
{
但是,请在使用前先考虑一下:隔离级别是一件好事 。 它有助于使数据保持稳定状态。 忽略它会导致各种奇怪的错误。 您的数据库具有强大的功能来帮助您,而不仅仅是关闭它,因为它似乎很难正确执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.