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

前端之家收集整理的这篇文章主要介绍了c# – Linq缓存数据值 – 主要的并发问题?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我做的一个小实验:
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

原文链接:https://www.f2er.com/csharp/97688.html

猜你在找的C#相关文章