1

当我尝试从 Oracle 数据库对模型进行逆向工程时,当相关表的 a 列上有多个触发器时,我会遇到错误。我在升级的 Oracle 7 数据库上放置了一个 Web UI(它已迁移到 Oracle 18C)。原始系统是一个旧的 Unix 终端 UI。我的解决方案是只读的。解决方案是 .NET Core 3.1,Oracle.EntityFrameworkCOre 是 3.19.110。

当我在列上具有多个触发器的表上运行上述命令时,它会出错。

Scaffold-DbContext "User Id=<user>; Password=<pwd>; Data Source=<datasource>;" Oracle.EntityFrameworkCore -OutputDir Models -Context GlobalContext

使用详细模式,我得到以下信息。

Sequence contains more than one matching element
   at System.Linq.ThrowHelper.ThrowMoreThanOneMatchException()

生成的 SQL 是

    select u.*, v.trigger_name, v.table_name, v.column_name, v.table_owner 
from (SELECT    sys_context('userenv', 'current_schema') as schema,    c.table_name,    c.column_name,    c.column_id,    c.data_type,    c.char_length,    c.data_length,    c.data_precision,    c.data_scale,    c.nullable,    c.identity_column,   c.data_default,    c.virtual_column,    c.hidden_column  
FROM user_tab_cols c INNER JOIN  (select distinct object_name as table_name from user_objects where object_type in ('TABLE', 'VIEW', 'MATERIALIZED VIEW'))  t  ON t.table_name=c.table_name  WHERE t.table_name <> '__EFMigrationsHistory'  AND (t.table_name IN (:t0) AND CONCAT(sys_context('userenv', 'current_schema'), CONCAT('.', t.table_name)) IN (:sdott0))  )u 
left join USER_TRIGGER_COLS v  on u.table_name = v.table_name and u.column_name = v.column_name and u.schema = v.table_owner 
ORDER BY u.column_id 

结果如下(我已将表格/触发器设为通用,但您看到了问题)

在此处输入图像描述

没有删除触发器,有没有办法对表进行逆向工程?

4

0 回答 0