這裏最大的標識ID是代碼:檢索使用的TransactionScope
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
DBContext.AddtoSomeTable(record);
System.Threading.Thread.Sleep(5000);
DBContext.SaveChanges();
MAX_ID = (from t in DBContext.SomeTable
select t.ID).Max();
scope.Complete();
}
據我所知,完成範圍前,MAX_ID
應該是新記錄的ID,這是剛剛插入。即使有兩個用戶同時提交,後面的用戶也應該等到第一個用戶的TransactionScope
完成。
但是,會發生什麼是兩個用戶得到相同的MAX_ID
。這意味着在將第一人的記錄插入數據庫之後,插入第二人的記錄,然後第一個人獲得他的MAX_ID
。
我認爲在一個事務中,表被鎖定以避免髒數據。任何人都可以解釋嗎?
編輯: ID字段是自動遞增
我認爲框架是假設返回新插入的對象的ID。你是否看過記錄中返回的內容? ID字段? –
@lrb id是自動遞增的,所以記錄沒有那個字段,那是什麼意思? – pita
我在猜測插入的業務對象有一個自動遞增的主鍵字段,如果配置正確,BO的ID字段在SaveChanges後將有一個更新的ID。 –