我有一個Windows窗體。我在窗體的構造函數中創建了我的數據上下文。當我點擊一個按鈕時,我想顯示有關文章的信息。數據可以在外部更新。問題在於,在這種情況下,數據不會刷新。Linq to SQL FirstOrDefault不執行SQL查詢
我已經知道每次重新創建我的數據上下文是一個選項。 ToList將強制刷新數據。但我真的認爲FirstOrDefault()會每次執行SQL ...
我做了一些日誌,事實並非如此。那裏有一個選項來強制執行SQL嗎?這裏有緩存嗎?
using (var log = new System.IO.StreamWriter("D:\\LOG.TXT", true))
{
DB.Log = log;
var article = DB.T_Articles.FirstOrDefault(x => x.NumArticle == 11);
MessageBox.Show(article.Description);
var articles = DB.T_Articles.ToList();
log.WriteLine("----------------------------------");
DB.Log = null;
}
這是日誌文件。我們可以看到FirstOrDefault方法背後的SQL在這裏。我們可以看到,它消失了,第二次
SELECT TOP (1) [t0].[NumArticle], [t0].[EAN13], [t0].[Minimum], [t0].[Emplacement], [t0].[Fournisseur], [t0].[Qte], [t0].[Description], [t0].[Photo], [t0].[Prix], [t0].[IsEmail]
FROM [dbo].[T_Article] AS [t0]
WHERE [t0].[NumArticle] = @p0
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [11]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.7.2046.0
SELECT [t0].[NumArticle], [t0].[EAN13], [t0].[Minimum], [t0].[Emplacement], [t0].[Fournisseur], [t0].[Qte], [t0].[Description], [t0].[Photo], [t0].[Prix], [t0].[IsEmail]
FROM [dbo].[T_Article] AS [t0]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.7.2046.0
----------------------------------
SELECT [t0].[NumArticle], [t0].[EAN13], [t0].[Minimum], [t0].[Emplacement], [t0].[Fournisseur], [t0].[Qte], [t0].[Description], [t0].[Photo], [t0].[Prix], [t0].[IsEmail]
FROM [dbo].[T_Article] AS [t0]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.7.2046.0
----------------------------------
您使用什麼工具基於執行SQL生成該日誌文件?如果您運行SQL跟蹤,您是否看到多次執行TOP 1查詢? – mjwills
請顯示'T_Articles'的代碼。 – mjwills
@mjwills我使用了一個dbml文件我不確定這會有所幫助。 TOP(1)只是第一次出現 – pjaaar