c# - Linq to SQL FirstOrDefault 不执行 SQL 查询

标签 c# winforms linq linq-to-sql

我有一个 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]);

关于c# - Linq to SQL FirstOrDefault 不执行 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45035025/

相关文章:

c# - 使用自动增量插入

C#清零前清空列表

c# - 为什么可以通过ref参数修改readonly字段?

c# - 漫游用户设置是否按客户端程序集版本保存?

c# - 我怎样才能在这样一个数组的形式上使用一些控件

c# - 使用集合参数对集合属性进行 Linq 查询

c# - EF6、Windows 服务和数据库轮询

c# - 防止 Revit 窗口打开

c# - 如何检测是否调试

winforms - Devexpress Master细节网格控件