c# - LINQ to SQL 语句相似吗?

标签 c# sql-server winforms linq-to-sql

我在 VS2015 中从 C# 中发现了一个有趣的 Linq to SQL 行为。

我读取了一个 SQL 表,并在 win 表单上显示内容。然后我使用以下方法更新行的描述:

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 to SQL 中的 DataContext 缓存所有对象,但仅缓存整个实体。因此,第一个查询从缓存返回对象,但第二个查询与缓存没有共同之处,因为它不查询整个实体。第二个查询是直接针对数据库调用的。

您可以使用上下文中的“刷新”方法刷新缓存中的对象,也可以只创建新的上下文对象。

关于c# - LINQ to SQL 语句相似吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34809593/

相关文章:

c# - Unity C# 输入系统获取任意键并获取按下的键名

C# & XNA - 2D 引擎 - 来自汽车的 Group Sprites

sql-server - 如何通过分组合并成多个列?

sql - 将数据库从开发/测试迁移到生产的最佳实践

c# - 如何生成下一个主键值

c# - ASP.NET & TCP 服务器解决方案

c# - 获取计算机首次使用日期

sql - sysdate和getdate()的常用sql是什么

C# 应用程序在开发机器上运行,在非开发机器上失败

c# - 如何让 Visual Studio 2008 Windows 窗体设计器呈现实现抽象基类的窗体?