2010-03-27 52 views
0

我喜歡使用LINQ to SQL。唯一的問題是我不喜歡更新表的默認方式。如何在LINQ to SQL中進行UPDATE查詢?

比方說,我有以下幾列如下表:

ID (primary key), value1, value2, value3, value4, value5 

當我需要更新我稱之爲

UPDATE ... WHERE [email protected] 

的LINQ to SQL調用

UPDATE ... WHERE [email protected] and [email protected] and [email protected] and [email protected] and [email protected] and [email protected] 

我可以通過添加

來覆蓋此行爲
UpdateCheck=UpdateCheck.Never 

添加到每列,但每次使用GUI更新DataContext類時,都將被刪除。有什麼辦法可以告訴LINQ使用這種更新數據的方式嗎?

回答

2

我很困惑這個說法:

但與GUI DataContext類的每次更新,這將被刪除。有什麼辦法可以告訴LINQ使用這種更新數據的方式嗎?

通過「GUI」,你是指Linq to SQL designer嗎?因爲每個成員的屬性表都有一個可以設置爲「從不」的「更新檢查」屬性。如果您手動編輯.designer.cs文件,則不要這樣做,而應更改實際設計器中的Update Check設置。

Designer Screen http://img29.imageshack.us/img29/7912/updatecheckdesigner.png

請注意:更新使用LINQ到SQL的「默認方式」被稱爲optimistic concurrency,並且是防止來自多個用戶的更新衝突的方法。如果你關閉此功能通過使用上述方法,你必須做好應對的事實,如果兩個用戶在同一時間打開相同的記錄,第二個用戶的更改將覆蓋第一用戶的更改沒有任何警告或確認。確保這是你真正想要的行爲。

+0

是的,但它在您使用(例如)timestamp列 – RobS 2010-03-27 17:35:14

+0

@Rob桑德斯的情況下失敗:'rowversion'柱(又名'timestamp')是特別。這個名字是有原因的。除非您打算將它們用於複製或同步(在這種情況下,它們不應包含在DBML中)或用於併發控制(在這種情況下,您總是需要更新檢查),否則它們不應該成爲模式的一部分。 – Aaronaught 2010-03-27 17:42:37

+0

是的,我知道什麼是rowversion列。事實是,L2S允許你將它們添加到DBML中,所以值得了解對LS2併發模型的影響 – RobS 2010-03-27 17:45:17

0

不幸的是,沒有,沒有。您必須在生成(或更新)之後手動編輯DBML - 這是一種痛苦(或者如另一個答案中已經提到的那樣使用Designer)。

當我最後一次使用L2S的一個項目,我寫了一個快速的工具,它跑了一代和後固定起來,但它是其中(c)不應該要求恕我直言不必要的痛苦。

0

自己跑進這一個。訣竅是改變生成DBML的方式 - 例如使用l2st4。然後,您可以將煩人的UpdateCheck屬性設置爲永遠不會修改模板。