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执行时没有报告错误
依赖关系:
- 甲骨文 12c
- EntityFramework6.1.3
- Oracle.ManagedDataAccess.EntityFramework 12.1.2400
更新
我上传了一个重现问题的简单解决方案:
https://github.com/Certegy/Concurrency/
我找到了解决此错误的解决方法。当更新 失败 时, 'Computed' 字段不会更新为它们的新值...而是设置为 null。
所以解决方案是手动检查计算字段,如果它们为空,手动抛出 DbUpdateConcurrencyException。
我希望强调的 EF 错误得到解决。如果有人知道在哪里提交错误报告,请告诉我!
我遇到了 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执行时没有报告错误
依赖关系:
- 甲骨文 12c
- EntityFramework6.1.3
- Oracle.ManagedDataAccess.EntityFramework 12.1.2400
更新 我上传了一个重现问题的简单解决方案: https://github.com/Certegy/Concurrency/
我找到了解决此错误的解决方法。当更新 失败 时, 'Computed' 字段不会更新为它们的新值...而是设置为 null。
所以解决方案是手动检查计算字段,如果它们为空,手动抛出 DbUpdateConcurrencyException。
我希望强调的 EF 错误得到解决。如果有人知道在哪里提交错误报告,请告诉我!