1
我有一個linq查詢運行在WCF Web服務中查找匹配,如果找不到,那麼它創建一個。LINQ插入到數據庫導致重複
我的代碼看起來像
//ReadCommitted transaction
using (var ts = CreateTransactionScope(TransactionScopeOption.RequiresNew))
{
Contract contract = db.Contracts.SingleOrDefault(x => x.txtBlah == str);
if (contract == null)
{
contract = new Contract();
contract.txtBlah = str;
db.Contracts.InsertOnSubmit(contract);
db.SubmitChanges();
}
...
db.SubmitChanges();
}
的問題是,我得到重複。我認爲這個事務會鎖定數據庫以確保沒有發現重複(並提供回滾功能)。我怎樣才能確保沒有重複?
這將阻止該地區周圍的每一個電話..我只能鎖定插入部分?也就是在readcommitted事務內的塊序列化事務? – BabelFish 2010-10-13 21:54:02
aka我可以得到BeginReadCommitTran {DoSomeFunctions; BeginSerializableTran {Insert;承諾; } DoMoreFunctions;承諾; }如果這是有道理的 – BabelFish 2010-10-13 21:57:20
只把select和insert插入一個可串行化的tran或者爲它寫一個sproc。 – jomi 2010-10-13 21:57:42