我有两个表(Knicks和Knacks)和一个连接两个表(PaddyWhacks)的视图。表格包含以下字段:
Knicks.key, Knicks.data1
Knacks.fkey, Knacks.data2
所以视图包含:
PaddyWhacks.key, PaddyWhacks.data1, PaddyWhacks.data2
我正在使用LINQ to SQL将完整视图检索为IQueryable,一切看起来都不错。在此之后,我从尼克斯手中抢到一排并更新它:
Knick k = db.Knicks.Single(row => row.data1 == 5);
k.data1 = 6;
db.SubmitChanges();
我知道更新是正确的,因为如果我在Knick上执行Count(),其中data1 == 5,结果已经改变(我可以在数据库中查看并查看更改)。但是,如果我再次使用以下方法检索Paddywhacks:
IQueryable<PaddyWhack> rows = from row in db.PaddyWhacks select row;
相应的data1值仍为5.
应用程序在托管的Web服务器上运行,如果我等待足够长的时间并再次尝试,我将在IQueryable视图中看到更新的值。我猜测某些内容正在被缓存,也许LINQ不会一直回到数据库来重新获取数据。是否需要注意LINQ或SQL Server功能才能解决问题?
答案 0 :(得分:1)
我不使用linqtosql,但你知道某些东西在缓存中是正确的。视图只是一个“宏”查询,数据是来自原始表的数据,因此它始终是最新的。我会尝试使用与IQueryable()不同的函数或创建新连接,然后运行查询。
答案 1 :(得分:1)
您可以尝试刷新DataContext,如下所示:
dc.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, rows);