2016-01-15 113 views
2

我從LINUX到VS2015的C#中找到了一個有趣的行爲。LINQ to SQL語句相似?

我有一個SQL表,我讀了,我在勝利形式上顯示內容。然後,我通過使用更新行的描述:

dc.SubmitChanges(); 

如果我期待在SQL Server Management Studio中,該值已經更新。

現在,這兩個陳述給了我不同的結果。任何理由?

var x1 = dc.MyTable.Where(p => p.ID == 2).First().Description; 
var x2 = dc.MyTable.Where(p => p.ID == 2).Select(x => x.Description).First(); 

x1包含不正確的舊值,而x2包含正確的新值。

如果我關閉表單並重新打開它,那麼x1和x2都包含正確的值。就好像這些值以某種方式被緩存。

+0

用FirstOrDefault替換第一個() – rdn87

+0

也嘗試過。它是orginally First():-) –

回答

2

從LINQ到SQL的DataContext緩存所有對象,但只緩存整個實體。因此,第一個查詢從緩存返回對象,但第二個查詢與緩存沒有任何共同之處,因爲它不查詢整個實體。第二個查詢是直接針對數據庫調用的。

您可以使用上下文中的「刷新」方法刷新緩存中的對象,也可以只創建新的上下文對象。

+0

我運行了RefreshMode.OverwriteCurrentValues並且工作正常。謝謝。 –

+1

因此,請標記答案:) –

+0

我試過 - 但您的答案是快速,並有一個計時器! –