繁体   English   中英

Linq to SQL FirstOrDefault不执行SQL查询

[英]Linq to SQL FirstOrDefault does not execute the SQL query

我有一个Windows窗体。 我在表单的构造函数中实例化数据上下文。 我想在单击按钮时显示有关文章的信息。 数据可以在外部更新。 问题在于,在这种情况下,不会刷新数据。

我已经知道每次都可以重新实例化数据上下文。 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

----------------------------------

您可以尝试在FirstOrDefault()之前每次刷新上下文:

Context.Refresh(RefreshMode.StoreWins, [table_name]);

您可以重新加载找到的条目,了解有关缓存清除的更多信息

  var article = DB.T_Articles.FirstOrDefault(x => x.NumArticle == 11);
  DB.Entry(article).Reload();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM