2008-12-30 59 views
2

如何在不必首先在LINQ中選擇數據的情況下更新記錄?因爲您必須首先執行linq select(顯然調用成本高昂的SQL SELECT),請更改所需屬性,然後執行SubmitChanges()。我希望避免這種情況,只需執行SQL UPDATE,我已經知道該ID。更新之前沒有先選擇LINQ 2 SQL中的數據?

回答

1

我還沒有嘗試過,但看起來,如果你能做到這一點與附件:

Table(TEntity).Attach Method (TEntity, Boolean)

你設置處於更新狀態的對象並將其傳入,並將布爾參數設置爲true。當然,那麼你必須設置全部這些字段,而不僅僅是你想要改變的字段。

如果您只想更改一個或兩個字段,則可以使用DataContext對象上的ExecuteCommandExecuteQuery方法直接調用SQL。您必須將SQL作爲字符串傳入,併爲SQL中的每個參數傳入一個參數。請特別注意SQL字符串必須如何構建:

該命令的語法幾乎 一樣用於創建 一個ADO.NET DataCommand的語法。唯一的 區別在於如何指定參數 。具體而言,您 通過在大括號括起來 指定參數({...})和枚舉它們 從1開始的參數是與所述參數陣列中的同樣編號 對象相關聯 。

0

除非您將對象設置爲使用樂觀併發性(我認爲所有列都是nocheck),否則這將非常困難。使用任何類型的併發性,您都需要舊值和新值,至少對於檢查的列是必需的。或者,您可以創建並映射SQL函數/存儲過程以進行更新,或者直接使用ExecuteCommand執行SQL,如@Kyralessa所述。我認爲Detach/Attach在配對時效果最好,即獲取對象,分離,使用它,然後在完成後重新附加並保存。

+0

是的。我的目的是用戶可以重新排列元素的排序順序;我可以返回所有的表單數據並更新排序順序,但是他們所有的表單數據也會被更新,即使他們只是想更新排序。我真的很想更新訂單欄,但聽到你的意思concurr。 – GONeale 2008-12-30 03:45:00

1

PLINQO實現實體分離,並允許您從一個上下文中分離實體,然後將其重新附加到另一個上下文中。它還能夠直接執行更新和刪除操作,而無需首先檢索實體。欲瞭解更多信息,你可以看看網站http://www.plinqo.com/

+0

Thnx Eric,方便。 – GONeale 2009-05-05 00:30:35