我正在使用vb.net 2017,Entity Framework 6和sql server 2018R2。 我有一个表TB1(id,name,value1) 我得到了数据:
myquery=(From t in context.tb1s select t).tolist
现在,myquery的记录中包含以下值:name = Name1,value1 = 5
另一个在另一台PC上运行相同程序的用户,对数据库value1 = 10上的该记录进行了更改。他将更改保存在数据库中。
在我的表单上,我有一个“刷新”按钮,它会再次执行我的第一个查询:
myquery=(From t in context.tb1s select t).tolist
但是在该记录上,value1仍为5,并且未获取更新后的值。 当其他用户创建新记录或删除现有记录时,我没有问题。当我按下“刷新”按钮时,所有这些更改都会反映出来。但是,当记录更新时,我总是具有旧值。
我该如何解决此问题不处理上下文?
谢谢!
编辑 我发现了2种通用方法可以解决此问题而无需处理上下文(使用新值从数据库刷新实体及其子级)
方法1
For Each en As tb1 In tb1collection
context.Entry(en).Reload()
For Each chld In en.mychilds
context.Entry(chld).Reload()
Next
Next
方法2
For Each en As tb1 In tb1collection
For i= en.mychilds.count-1 to 0 step -1
context.Entry(en.mychilds(i)).State = EntityState.Detached
Next
context.Entry(en).State = EntityState.Detached
Next
context.tb1s.Include("mychilds").Load
问题在于,当重新整理实体的集合非常大时,这两种方法都很慢。 我该怎么办?
答案 0 :(得分:0)
这有效:
Dim contextobj = (CType(context, IObjectContextAdapter)).ObjectContext
contextobj.Refresh(RefreshMode.StoreWins, context.tb1s.Local)
contextobj.Refresh(RefreshMode.StoreWins, context.mychilds.Local)