【发布时间】:2017-01-06 06:45:53
【问题描述】:
我遇到了 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 Developer 中手动运行此查询时,它会导致错误:
错误信息 错误报告 - ORA-06550:第 14 行,第 6 列: PLS-00707:不支持的构造或内部错误 [2602] ORA-06550:第 14 行,第 1 列: PL/SQL:忽略 SQL 语句 06550. 00000 - “第 %s 行,第 %s 列:\n%s” *原因:通常是 PL/SQL 编译错误。
通过实体框架执行时不会报告错误
依赖关系:
- 甲骨文 12c
- EntityFramework 6.1.3
- Oracle.ManagedDataAccess.EntityFramework 12.1.2400
更新 我上传了一个简单的解决方案来重现该问题: https://github.com/Certegy/Concurrency/
【问题讨论】:
标签: c# oracle entity-framework optimistic-concurrency