我使用linq to sql在合同表中創建條目。Linq to sql - 在同一事務上執行多個查詢
一列需要有條件地從一系列值中分配一個應用程序編號。
我想簡單地增加最大現有值,但它是一個多用戶應用程序,並且我擔心多個合同接收相同的應用程序編號,如果它們發生的距離太近。
是否有辦法強制整個事情使用相同的事務,或在同一個提交期間執行兩個?
我使用linq to sql在合同表中創建條目。Linq to sql - 在同一事務上執行多個查詢
一列需要有條件地從一系列值中分配一個應用程序編號。
我想簡單地增加最大現有值,但它是一個多用戶應用程序,並且我擔心多個合同接收相同的應用程序編號,如果它們發生的距離太近。
是否有辦法強制整個事情使用相同的事務,或在同一個提交期間執行兩個?
放在一個TransactionScope
所有代碼:
using (var transaction = new TransactionScope())
{
// Perform the changes
transaction.Complete();
}
有關TransactionScope
類的更多信息,請參閱http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx。
您可以創建一個SqlConnection
和SqlTransaction
,並將其提供給LINQ到SQL DataContext
:
using (var con = new SqlConnection(...))
{
con.Open();
using (var tran = con.BeginTransaction())
{
using (var db = new YourDataContext(con))
{
// This line is needed in .NET 3.5 (not in 4.0)
db.Transaction = tran;
// Do your stuff
db.SubmitChanges();
// Do more stuff
db.SubmitChanges();
}
}
}
你可以使用在你把所有你在一個事務中需要採取的行動的照顧一個存儲過程。
我不知道我理解的問題,但是當你調用提交包裝所有的變化在一個單一的交易變化 - http://msdn.microsoft.com/en-us/library/bb399378.aspx
問題是我需要基於一個標量查詢來立即設置一個唯一值來插入對象。我需要交易延伸到提交之外,所以這會以原子方式發生。 – 2010-11-02 19:51:09
啊,我看到了,在這種情況下,你確實需要把整個事情包裝在一個事務範圍內(這將在下面創建一個sqltransaction),就像Pieter的回答一樣。 – 2010-11-02 19:57:09
完美 - 非常感謝你。 – 2010-11-02 19:32:48
不客氣。 – 2010-11-02 19:33:19