在数据库中更新值时,在EF6中使用linq查询给出旧值

时间:2018-11-30 08:53:29

标签: c# asp.net entity-framework linq

在数据库中具有更新值的情况下,在EF6中使用Linq查询将给出旧值 在下面的第一次运行代码中,它工作正常,但是在表2018-11-30 09:40:39.478559: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 2123 MB memory) -> physical GPU (device: 0, name: Quadro M2000M, pci bus id: 0000:01:00.0, compute capability: 5.0) 获取新行之后,查询仅返回旧值,而我希望它可以检索到包括新记录的

tblReferenceNumber

为什么我会得到旧的价值观? 我该如何解决?

2 个答案:

答案 0 :(得分:0)

DbContext的每个实例都有一个缓存。如果您使用的db实例与上次获得该记录的实例相同,那么最终将获得缓存的数据。

您可以使用:

db.Entry(LRefNum).Reload();

强制其获取新数据。

有关此处缓存的更多信息:no destructors are called

但是,这也引发了一个问题,为什么使用相同的db实例两次获得相同的记录。您是否可能将db声明为静态的?

答案 1 :(得分:-1)

使用.First()时,将实现此查询并将数据加载到内存中。 因此,当您尝试从LRefNum获取值时,您引用的是内存中的数据而不是数据库中的数据。