我知道如何在SQL中编写代码,但在EF中,我很难过:
SQL查询:
UPDATE Queue
SET Status = 'Locked'
WHERE ID = 1 AND Status = 'New'
我尝试了什么,但知道错误的EF DbContext
就是这样。
var queueEntities = new QueueEntities();
var queueItem = queueEntities.SingleOrDefault<Queue>(q => q.id == 1 && q.Status = "New");
queueItem.Status = "Locked";
queueEntities.Entry<Queue>(queueItem).State = System.Data.Entity.EntityState.Modified;
queueEntities.SaveChanges();
由于显而易见的原因,这些与以下内容不同:
SQL方法在更新记录时锁定记录
DbContext
方法获取它,然后更新它。在并发中,这允许线程A获取项目,在它调用更新之前,线程B将获得该项目,从而导致两个项目都处理QueueItem
如果您需要更具体的信息,请告诉我。
答案 0 :(得分:0)
我找到了答案,这就是我们所说的批量更新。为了能够使用完全可自定义的 where 子句来安装Nuget包:PM&gt; Install-Package EntityFramework.Extended。引用的网站是:http://weblogs.asp.net/pwelter34/entity-framework-batch-update-and-future-queries
这样的沮丧不是吗?实体框架无法定义多个/自定义 where 子句?