[英]C# / Linq-to-sql - Lock datacontext.Table on insertonsubmit
我正在我的數據訪問類上創建一個方法,它將向數據庫插入一個實體對象,之后我希望得到最新的插入ID ...而且我已經完成了但是后來我想知道是什么如果方法以某種方式同時被調用兩次會發生,它會返回錯誤的ID嗎?
因此,為了解決這個問題,我決定在我的datacontext上鎖定表格:
lock(dataContext.Persons)
{
InsertOnSubmit(person);
dataContext.SubmitChanges();
}
但我確實覺得這是不合適的......我的意思是,表格不大並且不需要花費很長時間才能提交更改...所以我的問題是,我會遇到什么樣的麻煩來鎖定它就像那樣?
PS:如果我的問題不夠明確,請告訴我,我會編輯它!
沒有必要鎖定你的桌子。
當您插入person
時,LINQ-to-SQL將在您調用.SubmitChanges()
時自動使用數據庫中的標識填充您的ID
字段。
需要注意的是,您的數據庫和L2S實體都必須將您的ID
字段定義為標識 。 在Person
實體上,您應該將該字段定義為主鍵, IsDbGenerated=true
, UpdateCheck=never
,並且具有正確的數據庫類型。
提交后,您應該只需從Person
實體中檢索ID
:
dataContext.Persons.InsertOnSubmit(person);
dataContext.SubmitChanges();
var id = person.ID; // now has the database generated identity.
我不確定這是否是您關注的一部分,但如果您使用TransactionScope,您可以傳遞一個處理多個交易的TransactionOption。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.