我遇到了Oracle和EF6樂觀併發問題。 我有一個更新觸發器,其遞增row_version領域,並已註冊了該領域的ConcurrencyToken併爲DatabaseGenerated(計算機)實體框架6 Oracle和樂觀併發
我看到的問題是,更新查詢具有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:不支持ORA-06550:第14行,第1列: PL/SQL:忽略SQL語句 06550. 00000 - 「行%s,列%s:\ n%s」 *原因:通常PL/SQL編譯錯誤。
當通過實體框架的執行沒有錯誤報道
依賴關係:
- 甲骨文12C
- 的EntityFramework 6.1.3
- Oracle.ManagedDataAccess.EntityFramework 2400年1月12日
UPDATE 我已上傳一個簡單的解決方案,它再現了問題: https://github.com/Certegy/Concurrency/