【发布时间】:2016-03-31 16:21:46
【问题描述】:
针对 Sql Server 2014 使用 Entity Framework 6,我得到了要处理的项目列表,其 StatusId 为 1。处理每个项目后,它以状态 2 保存,因此不会再次被处理。处理过程可能需要几分钟时间。
但是,这不是所谓的“线程安全”。换句话说,如果代码在第一个完成之前再次启动(例如由不同的进程),则项目的状态仍然是 1,所以它再次进入队列并被第二次处理。
我怎样才能得到要处理的记录并确保它们不会被第二次检索?例如,是否可以检索数据并更新 Transaction 中的状态?
【问题讨论】:
-
为什么不创建第三个状态“处理中”并在工作开始时设置它。
-
lock和/或DbContext.Database.BeginTransaction()? -
@entropic 我喜欢将这个想法与交易相结合。
标签: c# entity-framework entity-framework-6