我需要从数据库获取 1000 行,同时将它们标记为“处理中”。这样,另一个线程就无法获取相同的 1000 行并处理它们。

使用 linq 我做这样的事情:

msgs =(来自数据库中的m。

理想情况下,我会同时将状态设置为 MESSAGESTATUSPROCESSING。当然这必须是原子的。

有任何想法吗?还是又回到了SQL?

谢谢!

有帮助吗?

解决方案

在 linq2sql 中你不能这样做。使用存储过程,并在设计器上配置它以输出Message。这样您就可以操作加载的实体并正常提交更改。

检查此操作以了解如何执行此操作(特别是将 SPROC 方法的返回类型映射到数据模型类):http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retriving-data-using-stored-procedures.aspx

其他提示

LINQ的本身是不会提供这种能力;记住的LINQ查询==。数据更新发生在其他地方。

您可能是在这种情况下写一个存储过程返回的结果更好;该存储过程可以更新表并自动返回结果,然后你的应用程序将有一个单一的电话。

可以围绕代码与锁{}。

锁关键字

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top