我有一个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
----------------------------------
答案 0 :(得分:3)
每次在FirstOrDefault()之前尝试刷新上下文:
Context.Refresh(RefreshMode.StoreWins, [table_name]);
答案 1 :(得分:1)
您可以重新加载找到的条目,详细了解cache busting
var article = DB.T_Articles.FirstOrDefault(x => x.NumArticle == 11);
DB.Entry(article).Reload();