加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Linq缓存数据值 – 主要的并发问题?

发布时间:2020-12-15 18:08:48 所属栏目:百科 来源:网络整理
导读:这是我做的一个小实验: MyClass obj = dataContext.GetTableMyClass().Where(x = x.ID = 1).Single();Console.WriteLine(obj.MyProperty); // output = "initial"Console.WriteLine("Waiting..."); // put a breakpoint after this lineobj = null;obj = da
这是我做的一个小实验:
MyClass obj = dataContext.GetTable<MyClass>().Where(x => x.ID = 1).Single();
Console.WriteLine(obj.MyProperty); // output = "initial"
Console.WriteLine("Waiting..."); // put a breakpoint after this line
obj = null;
obj = dataContext.GetTable<MyClass>().Where(x => x.ID = 1).Single(); // same as before,but reloaded
Console.WriteLine(obj.MyProperty); // output still = "initial"
obj.MyOtherProperty = "foo";
dataContext.SubmitChanges(); // throws concurrency exception

当我在第3行之后点击断点时,我转到SQL查询窗口并手动将值更改为“已更新”.然后我继续跑步. Linq不重新加载我的对象,但重新使用它以前在内存中的对象!这是数据并发的一个巨大问题!

你如何禁用Linq显然保留在内存中的这些隐藏的对象缓存?

编辑 – 经过反思,微软本可以在Linq框架中留下如此巨大的鸿沟,这简直是不可想象的.上面的代码是我正在做的事情的一个愚蠢的版本,我可能错过了一些细微之处.简而言之,如果您进行自己的实验来验证我的上述发现是否正确,我将不胜感激.或者,必须有某种“秘密开关”使Linq对并发数据更新具有强大的功能.但是什么?

解决方法

这不是我以前遇到的问题(因为我不倾向于长时间保持DataContexts打开),但看起来像其他人有:

http://www.rocksthoughts.com/blog/archive/2008/01/14/linq-to-sql-caching-gotcha.aspx

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读