gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:03:35 27 4
gpt4 key购买 nike

这是我做的一个小实验:

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 框架中留下如此巨大的鸿沟简直是不可想象的。上面的代码是我实际操作的精简版本,我可能遗漏了一些细微之处。简而言之,如果您能自己做实验来验证我上面的发现是否正确,我将不胜感激。或者,必须有某种“ secret 开关”使 Linq 对并发数据更新具有鲁棒性。但是什么?

最佳答案

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

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

关于c# - Linq 缓存数据值 - 主要并发问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1499015/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com