LINQ to SQL 语句相似度?
LINQ to SQL statement similarity?
我从 VS2015 中的 C# 中发现了一个有趣的 Linq to SQL 行为。
我有一个 SQL table 我读过,我在获胜表格上显示内容。然后我使用以下方法更新一行的描述:
dc.SubmitChanges();
如果我查看 SQL Server Management Studio,值已更新。
现在,这两个陈述给了我不同的结果。有什么原因吗?
var x1 = dc.MyTable.Where(p => p.ID == 2).First().Description;
var x2 = dc.MyTable.Where(p => p.ID == 2).Select(x => x.Description).First();
x1 包含不正确的旧值,而 x2 包含正确的新值。
如果我关闭我的表单并重新打开它,那么 x1 和 x2 都包含正确的值。就好像这些值以某种方式被缓存了。
从 LINQ 到 SQL 的 DataContext 缓存所有对象,但只缓存整个实体。因此,第一个查询 returns 来自缓存的对象,但第二个查询与缓存没有共同之处,因为它不查询整个实体。第二个查询直接针对数据库调用。
您可以在上下文中使用 "Refresh" 方法刷新缓存中的对象,或者您可以只创建新的上下文对象。
我从 VS2015 中的 C# 中发现了一个有趣的 Linq to SQL 行为。
我有一个 SQL table 我读过,我在获胜表格上显示内容。然后我使用以下方法更新一行的描述:
dc.SubmitChanges();
如果我查看 SQL Server Management Studio,值已更新。
现在,这两个陈述给了我不同的结果。有什么原因吗?
var x1 = dc.MyTable.Where(p => p.ID == 2).First().Description;
var x2 = dc.MyTable.Where(p => p.ID == 2).Select(x => x.Description).First();
x1 包含不正确的旧值,而 x2 包含正确的新值。
如果我关闭我的表单并重新打开它,那么 x1 和 x2 都包含正确的值。就好像这些值以某种方式被缓存了。
从 LINQ 到 SQL 的 DataContext 缓存所有对象,但只缓存整个实体。因此,第一个查询 returns 来自缓存的对象,但第二个查询与缓存没有共同之处,因为它不查询整个实体。第二个查询直接针对数据库调用。
您可以在上下文中使用 "Refresh" 方法刷新缓存中的对象,或者您可以只创建新的上下文对象。