当我尝试从 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
结果如下(我已将表格/触发器设为通用,但您看到了问题)
没有删除触发器,有没有办法对表进行逆向工程?