2010-04-07 58 views
5

假設我在我的數據庫中有一個Orders表和一個由VS2008「Linq to SQL Classes」設計器生成的對應模型類。假設我的數據庫中還有一個存儲過程(ProcessOrder),用於對訂單記錄進行一些處理。如何讓Linq-to-SQL刷新其數據庫記錄的本地副本?

如果我做到以下幾點:

var order = dataContext.Orders.Where(o => o.id == orderId).First(); 

// More code here 

dataContext.ProcessOrder(orderId); 

order.Status = "PROCESSED"; 

dataContext.SubmitChanges(); 

...然後我會得到一個併發衝突如果ProcessOrder存儲過程已經修改了訂單(這當然是很可能的),因爲L2S將檢測訂單記錄已更改,並且無法將更改提交到該訂單。

這一切都相當合理,但如果我想要在調用存儲過程後更新訂單記錄怎麼辦?我如何告訴L2S忘記它的緩存副本並從數據庫中刷新它?

回答

15

您可以用Refresh方法做你的數據背景下,像這樣:

DataContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, 
        DataContext.Orders); 
+0

完美。我發現我也可以指定特定的訂單記錄,這正是我需要的。謝謝! – 2010-04-07 13:45:48

+1

但它不會更新映射到另一個表的關聯導航集合屬性。它只更新映射到當前實體指向的表的列的屬性。有沒有辦法呢? – RBT 2016-06-18 07:58:36

相關問題