.net经过cache.insert缓存后,后续的操作影响缓存的数据
.net通过cache.insert缓存后,后续的操作影响缓存的数据
从数据库将数据读取出来后,使用Cache.Insert将其缓存,然后对数据进行操作(比如筛选)并显示结果。请注意:是先缓存,再筛选。第二次读取时,不再读数据库,而是从缓存中返回数据。发现返回的数据是筛选后的数据。这不科学啊!!!求解,谢谢!
------解决思路----------------------
你就不应该 removeall 人家。你应该复制出你需要的数据集合来。
------解决思路----------------------
君是否知道 按值传递 和 按引用传递的 本质
我一般都是会 在缓存中查询
var query = cache.where(......)
从数据库将数据读取出来后,使用Cache.Insert将其缓存,然后对数据进行操作(比如筛选)并显示结果。请注意:是先缓存,再筛选。第二次读取时,不再读数据库,而是从缓存中返回数据。发现返回的数据是筛选后的数据。这不科学啊!!!求解,谢谢!
Public Shared Function GetStudents () As List (Of Student)
Dim key As String = "AllStudents"
If Not IsNothing (Cache(key)) Then
Return CType(Cache(key), List(Of Student))
End If
Dim lItems As List(Of Student)
'读取数据库,返回值给lItems,此处代码省略
Cache.Insert(key, lItems, Nothing, DateTime.Now.AddSeconds(600), TimeSpan.Zero)
Return lItems
End Function
Public Shared Sub GetStudentsInClass (classId As Integer)
'假设有50名学生,无论后面的筛选如何进行,下面这句的返回值应该是不变的
Dim lItems As List (Of Student)=GetStudents()
If classId > 0 Then
'此处进行筛选.按理不是直接操作缓存的数据,但问题是,这句结束后,缓存的数据就变成了筛选后的数据,而不是全部
lItems.RemoveAll (Function (vStudent) vStudent.ClassId <> classId)
End If
'后面展示结果
End Sub
------解决思路----------------------
你就不应该 removeall 人家。你应该复制出你需要的数据集合来。
------解决思路----------------------
君是否知道 按值传递 和 按引用传递的 本质
我一般都是会 在缓存中查询
var query = cache.where(......)