断开连接场景中的EF6 DbUpdateConcurrencyExcpetion

时间:2019-06-11 09:38:42

标签: c# oracle entity-framework entity-framework-6

在断开连接的情况下,我正在使用DbUpdateConcurrencyException进行挣扎,使用EF6(实体框架6)和Oracle DB。

基本上,我的代码如下所示(简化):

//retrieve transfer object from db (with statusid = 2)
//do something
transfer.StatusId = 3;

using (TransferContext tc = new TransferContext())
{
    tc.Entry(transfer).State = EntityState.Modified;

    tc.SaveChanges();
}

EF记录以下SQL:

update "T_TRANSFER_SC"
   set "STATUS_ID" = :p0
where (("ID" = :p1) 
   and ("STATUS_ID" = :p2))


-- :p0: '3' (Type = Decimal)

-- :p1: '1' (Type = Decimal)

-- :p2: '3' (Type = Decimal)

-- Completed in 3 ms with result: 0

该ID以及STATUS_ID属性都设置为:并发模式=固定

如您所见,参数p0和p2的值为3,但是p2的值为2(至少从我的理解),这是属性的旧值。

如果我执行代码,则会出现 DbUpdateConcurrencyException 异常:
“存储更新,插入或删除语句影响了意外的行数(0)。自从加载实体以来,实体可能已被修改或删除。有关了解和处理乐观并发异常的信息,请参见http://go.microsoft.com/fwlink/?LinkId=472540。”

该异常是相关的,因为数据库中没有ID = 1和STATUS_ID = 3的记录(db中的记录具有值1和2)。我不明白的是,为什么EF在Where-Clause中不使用STATUS_ID的旧值。

我是否缺少某些东西,或者在使用不同上下文(断开连接)时总是这样吗?以及我该如何解决?

0 个答案:

没有答案
相关问题