[英]Entity Framework Serializable Transaction Deadlock
我必須在數據庫中插入一行,但是問題是主鍵是基於行的總數生成的。 例如,如果數據庫有25601行,則新插入的記錄的ID將為CT25602。
我想將事務用於主鍵沖突。 這是我寫的代碼。
public void CreateContact(ContactViewModel input)
{
var transactionScopeOptions = new TransactionOptions
{
IsolationLevel = IsolationLevel.Serializable,
Timeout = TimeSpan.MaxValue
};
using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required, transactionScopeOptions))
{
var contactNo = GenerateIdentity();
var contact = MapContactFields(new NavContact { No_ = contactNo }, input);
_db.Contacts.InsertOnSubmit(contact);
_db.SubmitChanges();
transaction.Complete();
}
}
如果兩個人試圖在較短的時間間隔內插入聯系人,此代碼給我帶來僵局。
有什么建議么 ? 謝謝
是的,您描述的場景很可能會陷入僵局。 我建議改用序列 。 如果不是,那么一種解決方案是在掃描下一個身份之前 ,在事務中獲取獨占應用程序鎖定。 請參見sp_getapplock
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.