簡體   English   中英

實體框架可序列化事務死鎖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM