You need to enable JavaScript to run this app. 如何在.Net Core Entity Framework EDMX中为受影响实体添加Oracle Flashback列
优惠活动
大模型
产品
解决方案
定价
更多

如何在.Net Core Entity Framework EDMX中为受影响实体添加Oracle Flashback列

.NET Core EF EDMX添加Oracle Flashback审计列方案

由于Oracle Flashback相关的审计字段属于表伪列,默认不会被EF的EDMX刷新逻辑识别,需按以下步骤手动添加:

操作步骤

  • 打开项目中的.edmx文件,在模型浏览器中定位到需要对接Flashback功能的目标实体
  • 右键目标实体,依次选择「添加」→「标量属性」,按实际需求添加需要用到的Flashback字段,字段名需和Oracle官方伪列名完全一致,常用字段及对应C#类型如下:
    • ORA_ROWSCN:对应long?
    • VERSIONS_STARTTIME:对应DateTime?
    • VERSIONS_ENDTIME:对应DateTime?
    • VERSIONS_OPERATION:对应string(存储I/U/D标识增删改操作)
    • VERSIONS_XID:对应string(存储事务ID)
  • 选中每个刚添加的Flashback属性,打开属性面板,将StoredGeneratedPattern字段设置为Computed,避免EF在增改操作时向这些列写入值触发数据库报错
  • 右键.edmx文件,选择「打开方式」→「XML(文本)编辑器」,找到目标实体对应的<MappingFragment>节点,为每个新增的Flashback属性添加列映射,示例配置如下:
<MappingFragment StoreEntitySet="你的表名">
  <!-- 原有其他字段映射 -->
  <ScalarProperty Name="VERSIONS_STARTTIME" ColumnName="VERSIONS_STARTTIME" />
  <ScalarProperty Name="VERSIONS_OPERATION" ColumnName="VERSIONS_OPERATION" />
  <ScalarProperty Name="ORA_ROWSCN" ColumnName="ORA_ROWSCN" />
</MappingFragment>
  • 保存EDMX文件并重新生成实体类,Flashback相关属性就会同步到实体中。

功能验证

你可以直接通过EF的原生查询接口调用Flashback语法获取审计数据,示例代码如下:

// 查询最近7天指定数据的变更记录
var changeLogs = dbContext.你的实体集
    .FromSql($"SELECT * FROM 你的表名 VERSIONS BETWEEN TIMESTAMP SYSTIMESTAMP - INTERVAL '7' DAY AND SYSTIMESTAMP WHERE 主键字段 = {目标Id}")
    .ToList();

查询返回的实体对象会自动填充对应的Flashback属性值。

注意事项

  • 后续从数据库刷新EDMX模型时,手动添加的Flashback属性不会被覆盖,无需重复配置
  • 所有Flashback属性必须设置为可空,常规增删改操作不会返回这些字段的值,非空约束会触发EF运行时校验错误

内容的提问来源于stack exchange,提问作者C. Allen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 16:24:06