保存linq查询的数据以供以后比较

时间:2016-01-26 01:48:00

标签: vb.net linq

我正在尝试在对象中保存linq查询的数据,以便在数据更新到sql表之后与更新的字段进行比较。问题是,每次我访问原始linq查询对象时,我们都会看到更新,即使我正在使用ToArray,我认为它会立即执行查询,并且在引用该对象时不会再次执行。这是我的代码:

dim db as New DBDataContext
Dim oldJobPart = (From jp In db.JobParts
                 Where jp.JobNum = 10214
                 Select jp).ToArray

更新:

当在db对象中完成更新时,该对象与上述查询使用的对象相同,那么oldjobpart将反映新的更改。当我们创建一个新对象(db2)来更新数据库时,oldjobpart没有得到更新。

所以看起来如果我们使用相同的db对象来提交更新的更改(),即使我们没有触及oldjobpart对象并且我们使用toarray来创建oldjobpart,oldjobpart对象仍然会被更新。我想toArray不完全缓存数据并断开与原始数据库对象的连接?如果有人能证实这一点,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

是的,您的更新是正确的。

当您执行第一个查询时,它确实执行并将结果存储在数组中。

您遇到的问题是数组中的对象仍然附加到数据库上下文中 - 数组只是指向img中缓存的对象。如果在代码中或DbContext中的某个位置更新对象的属性,则还要更新数组所指向的对象。

如果你没有'想要创建多个上下文但希望数组中的对象与DbContext不同,一个简单的方法就是使用AsNoTracking(),这样对象就不会缓存在DbContext中:

DbContext