Entity Framework6 Oracle 和乐观并发

Entity Framework 6 Oracle and Optimistic Concurrency

我遇到了 Oracle 和 EF6 乐观并发的问题。 我有一个更新触发器,它增加了一个 row_version 字段,并将该字段注册为 ConcurrencyToken 和 DatabaseGenerated (Computed)

我看到的问题是更新查询的行计数为 1,而查询实际上没有更新行(row_version 被带外更改)

我现在正在制作复制品,将在 github...

更新一次
[Column("ROW_VERSION"), ConcurrencyCheck, DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public int? RowVersion { get; set; }

通过网络进行的查询有点古怪:

declare
     "ROW_VERSION" number(10,0);
     "ROWID" char(18);
begin
update
     "DB"."TEST"
     set "NAME" = 'John Smith'
where (("ID" = 1) and ("ROW_VERSION" = 1))      
returning
"ROW_VERSION",
     "ROWID" into
"ROW_VERSION",
     "ROWID";
open '' /* :p4 */ for select

"ROW_VERSION" as "ROW_VERSION",
     "ROWID" as "ROWID" 
from dual;
end;

当我尝试在 SQL 开发人员中手动 运行 此查询时,它会导致错误:

错误信息 错误报告 - ORA-06550:第 14 行,第 6 列: PLS-00707:不支持的构造或内部错误 [2602] ORA-06550:第 14 行,第 1 列: PL/SQL: SQL 语句被忽略 06550.00000 - "line %s, column %s:\n%s" *原因:通常是 PL/SQL 编译错误。

通过Entity Framework执行时没有报告错误

依赖关系:

更新 我上传了一个重现问题的简单解决方案: https://github.com/Certegy/Concurrency/

我找到了解决此错误的解决方法。当更新 失败 时, 'Computed' 字段不会更新为它们的新值...而是设置为 null

所以解决方案是手动检查计算字段,如果它们为空,手动抛出 DbUpdateConcurrencyException。

我希望强调的 EF 错误得到解决。如果有人知道在哪里提交错误报告,请告诉我!