2
データベースに行を挿入する必要がありますが、問題は、行の合計数に基づいて主キーが生成されることです。 など。 dbに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();
}
}
このコードは、2人の人が小さいタイムスパンに連絡先を挿入しようとするとデッドロックが発生します。
提案がありますか?ありがとうございます
x秒間に同じ操作を実行する再試行のような、ある種の「遅延」メカニズムを使用できませんでしたか? –