LINQ TO SQL 併發控制

2022-07-12 07:24:11 字數 690 閱讀 2711

column特性的updatacheck用於設定併發衝突處理方式

always:使用使用這個列進行衝突檢測

never 從不使用這個列進行衝突檢測

whenchanged 僅在成員被應用程式更改時使用這個列檢測

這裡的檢測指傳送的sql中的where中的條件,如userinfo表中name列進行衝突檢測的話,sql語句會類似這樣(其中id是主鍵)

update userinfo set ...  where [id]=@p0 and [name]=@p1  ...

如果沒有指定isversion列,更新和刪除都會生成很長的sql語句,一般isversion和isdbgenerated同時作用於乙個列,因為version一般由資料庫生成,如乙個時間戳列,通過觸發器在修改列時更新

將乙個非上下文的物件更新到資料庫方法

需要使用上下文的attach方法(使用此方法要保證上下文的objecttrackingenabled是true)

附加的更新實體必須在所有欄位的column特性都設定了updatecheck=nerver並且有isprimary=true的列,

或設定了isversion=true的字段

attach方法第二個引數用於標識物件是否是更改的,是true的話,提交更改時會把所有字段更新;false只有更新附加後改變的字段

Linq to sql 檢測併發

首先使用下面的 sql 語句查詢資料庫的產品表 select from products where categoryid 1 為了看起來清晰,我已經事先把所有分類為 1 產品的 和庫存修改為相同值了。然 後執行下面的程式 varquery from p in ctx.products where ...

LinQ to SQL 併發與事務 1

首先使用下面的sql語句查詢資料庫的產品表 select from products where categoryid 1 查詢結果如下圖 為了看起來清晰,我已經事先把所有分類為1產品的 和庫存修改為相同值了。然後執行下面的程式 var query from p in ctx.products wh...

LinQ to SQL 併發與事務 3

最後,我們把提交語句修改為 ctx.submitchanges conflictmode.failonfirstconflict 表示第一次發生衝突的時候就不再繼續了,然後並且去除最後的ctx.submitchanges 語句。來測試一下,在執行了sql後再繼續程式可以發現介面上只輸出了數字1,說明...