c# - Linq 在提交更改之前找不到插入的记录

标签 c# linq linq-to-sql

我有这段代码:

LinqDataContext ctx;

MyRecord R = new MyRecord();
R.Title = "test";
ctx.AllRecords.InsertOnSubmit(R);

bool bExists = ctx.AllRecords.Any(r => r.Title == "test");

注意:我没有调用 SubmitChanges。

为什么 bExists 返回为 false? Linq 不应该能够看到插入的记录吗?

最佳答案

请参阅如果未调用 submitchanges(),Linq 无法将值写入数据库。

对于第二个问题,是的,Linq 在提交之前缓存对象。我们还可以获取在缓存中但未提交到数据库的记录。

当你在上面插入记录时,我们可以从datacontext的缓存中获取上面的记录,如下所示:

首先从 DataContext 中获取变更集:

System.Data.Linq.ChangeSet MySet = ctx.GetChangeSet();

之后,从变更集中提取您的记录:

MyRecord b = (MyRecord )MySet.Inserts.Last();

您将获得标题为“test”的 MyRecord,这是您插入的。

希望这会有所帮助。

关于c# - Linq 在提交更改之前找不到插入的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8737293/

相关文章:

c# - 常见 Linq 表达式的示例

类型 Dictionary<string,string> 不支持 C# 比较运算符

c# - 将此var转换为long列表?

c# - 为什么要编写自定义 LINQ 提供程序?

c# - 获取给定 ID 列表中每个 ID 的最新更新记录。 LINQ

.net - 包含在 linq to entity 中的条件

c# - PsExec 在从编译为 "windows application"的非常简单的 c# 或 c++ gui 程序执行时挂起

c# - 从类中的列表属性中删除元素

c# - 分布式环境中的中间件应用

c# - 托管和非托管代码、内存和大小有什么区别?