@microi.net/cli 6.1.3 → 6.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.mcp.json +1 -1
  5. package/.workbuddy-plugin/marketplace.json +2 -2
  6. package/.workbuddy-plugin/plugin.json +1 -1
  7. package/assets/build-meta.json +3 -3
  8. package/cordis.patch.yml +1 -1
  9. package/package.json +1 -1
  10. package/scripts/codex-marketplace.json +20 -20
  11. package/scripts/mcp-codex-stdio-adapter.js +189 -189
  12. package/scripts/mcp-trae-windows-launcher.cmd +21 -21
  13. package/scripts/microi-cli-mcp.js +7 -7
  14. package/scripts/microi-skills.meta.json +293 -293
  15. package/skills/.microi-skills-version.json +2 -2
  16. package/skills/.progressive-disclosure-manifest.json +1 -1
  17. package/skills/ai-engine/SKILL.md +8 -1
  18. package/skills/ai-engine/references/ai-employees.md +48 -48
  19. package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
  20. package/skills/app-store/SKILL.md +11 -0
  21. package/skills/business-blueprint/SKILL.md +193 -193
  22. package/skills/datasource-engine/SKILL.md +93 -93
  23. package/skills/dos-orm/SKILL.md +105 -105
  24. package/skills/dos-orm/references/api-reference.md +229 -229
  25. package/skills/email-engine/SKILL.md +81 -81
  26. package/skills/email-engine/references/v8-email.md +34 -34
  27. package/skills/job-engine/SKILL.md +179 -176
  28. package/skills/message-notification/SKILL.md +156 -156
  29. package/skills/message-notification/references/contracts.md +102 -102
  30. package/skills/microi/SKILL.md +14 -14
  31. package/skills/microi-ai-application/SKILL.md +115 -115
  32. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  33. package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +10 -10
  34. package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +10 -10
  35. package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +10 -10
  36. package/skills/microi-codex/SKILL.md +130 -130
  37. package/skills/microi-datasource-mapping/SKILL.md +131 -131
  38. package/skills/microi-db-schema/SKILL.md +182 -175
  39. package/skills/microi-db-schema/references/core-tables.md +695 -695
  40. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  41. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  42. package/skills/microi-db-schema/references/schema.md +646 -646
  43. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  44. package/skills/microi-deployment/SKILL.md +262 -260
  45. package/skills/microi-deployment/references/deployment-matrix.md +112 -112
  46. package/skills/microi-docs-coverage/SKILL.md +133 -133
  47. package/skills/microi-docs-coverage/references/capability-map.md +91 -91
  48. package/skills/microi-form-engine/SKILL.md +338 -338
  49. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  50. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  51. package/skills/microi-left-right-layout/SKILL.md +141 -141
  52. package/skills/microi-microservice/SKILL.md +354 -354
  53. package/skills/microi-microservice/references/runtime-delivery.md +282 -282
  54. package/skills/microi-solution-quotation/SKILL.md +79 -78
  55. package/skills/microi-sso/SKILL.md +102 -102
  56. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  57. package/skills/microi-sso/references/inbound.md +53 -53
  58. package/skills/microi-sso/references/outbound.md +43 -43
  59. package/skills/microi-system-delivery/references/context-quality.md +3 -3
  60. package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +11 -11
  61. package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +12 -12
  62. package/skills/microi-system-delivery/references/progressive-03-/345/256/211/345/205/250/344/270/216/350/267/250/347/253/257/351/252/214/346/224/266.md +8 -8
  63. package/skills/module-engine/SKILL.md +297 -297
  64. package/skills/module-engine/references/module-config.md +204 -204
  65. package/skills/ocr-engine/SKILL.md +113 -113
  66. package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +10 -10
  67. package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +12 -12
  68. package/skills/performance-testing/SKILL.md +227 -227
  69. package/skills/print-engine/SKILL.md +259 -259
  70. package/skills/production-readonly-audit/SKILL.md +41 -41
  71. package/skills/report-engine/SKILL.md +83 -83
  72. package/skills/search-engine/SKILL.md +75 -75
  73. package/skills/spider-engine/SKILL.md +190 -190
  74. package/skills/system-observability/SKILL.md +264 -264
  75. package/skills/system-observability/references/memory-incident-triage.md +77 -77
  76. package/skills/translate-engine/SKILL.md +140 -140
  77. package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
  78. package/skills/ui-design/references/design-pattern-library.md +184 -184
  79. package/skills/ui-design/references/mci-design-contract.md +163 -163
  80. package/skills/ui-design/references/motion-and-media.md +78 -78
  81. package/skills/ui-design/references/product-flow-recipes.md +94 -94
  82. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  83. package/skills/unity-integration/SKILL.md +178 -178
  84. package/skills/unity-integration/references/sdk-api.md +82 -82
  85. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  86. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  87. package/skills/v8-cache-pattern/SKILL.md +320 -320
  88. package/skills/v8-debugging/SKILL.md +284 -284
  89. package/skills/v8-explorer-tree/SKILL.md +228 -228
  90. package/skills/v8-file-upload/references/cdn-alias-repair.md +13 -13
  91. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  92. package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
  93. package/skills/v8-image-processing/SKILL.md +190 -190
  94. package/skills/v8-image-processing/references/api-reference.md +623 -623
  95. package/skills/v8-mongodb/SKILL.md +241 -201
  96. package/skills/v8-mq-mqtt/references/mqtt-production.md +352 -352
  97. package/skills/v8-saas-multi-tenant/SKILL.md +315 -315
  98. package/skills/v8-sql-query/SKILL.md +302 -302
  99. package/skills/v8-template-engine/SKILL.md +167 -167
  100. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  101. package/skills/v8-workflow/references/workflow-configuration.md +49 -49
  102. package/skills/vision-engine/SKILL.md +160 -160
  103. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  104. package/skills/workspace-conventions/SKILL.md +40 -40
  105. package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +34 -34
  106. package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +6 -6
@@ -1,105 +1,105 @@
1
- ---
2
- name: dos-orm
3
- description: Dos.ORM C# 数据访问指南。用于 Microi.Server 中编写或审查 DbSession、Entity、From、WhereClip、事务、异步查询、BulkInsert、Upsert、SqlFunc、子查询、导航属性、CodeFirst、读写分离和分库分表代码。
4
- ---
5
-
6
- > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
-
8
- # Dos.ORM
9
-
10
- Dos.ORM 是 Microi.Server 底层 C# ORM。它不是接口引擎里的 `V8.Db`:
11
-
12
- - C# 服务端源码使用 `DbSession`、实体和 Section API。
13
- - V8 JavaScript 使用 `V8.FormEngine` 或 `V8.Db.FromSql`。
14
- - 不能把 C# lambda/事务示例原样放进 V8。
15
-
16
- 完整 API、跨库行为与示例见 `references/api-reference.md`。
17
-
18
- ## 默认选择
19
-
20
- | 需求 | 首选 |
21
- |---|---|
22
- | 普通实体查询 | `dbSession.From<T>().Where(...).ToList/ToListAsync` |
23
- | 动态条件 | `Where<T>` / `WhereClip` |
24
- | 复杂 SQL | `FromSql(...).AddInParameter(...)` |
25
- | 单条/小批写入 | `Insert/Update/Delete` |
26
- | 大于约 1000 行批量插入 | `BulkInsert/BulkInsertAsync`,先压测批大小 |
27
- | 按唯一键写入 | `Upsert/UpsertAsync` + 真实唯一索引 |
28
- | 多步原子写 | `BeginTransaction()`,`using` + Commit/Rollback |
29
-
30
- ## 方言与种子转换边界
31
-
32
- - SQL AST、标识符、函数、分页、Upsert 与数据库语义由 Dos.ORM 方言编译器维护;Microi 宿主和 seed CLI 仅作输入/输出适配,不用正则或字符串替换模拟跨数据库 SQL。
33
- - 官方 MySQL 种子采用流式词法/语法解析,生成完整中性结构与数据模型;每次动态清单以同一来源 SHA 的独立 MySQL 导入为基准,逐表比较结构、行数与数据摘要。历史快照数量不能硬编码为当前源验收,不能用登录夹具或仅结构代替完整种子。
34
- - 真实数据库认证逐个方言串行运行,保留完整性与失败回执;工具和安装器回归保留在源码中,生成 SQL、ZIP、报告归 `.tmp/` 或正式 CDN。
35
-
36
- ## 安全规则
37
-
38
- ### 连接生命周期与在线恢复
39
-
40
- - 创建事务、准备读取器、打开连接、提交/回滚及批处理任一路径抛异常,都必须释放本层拥有的连接;借用外部事务或批处理连接时不能擅自关闭。保留原始异常,不因 Dispose 失败遮盖原始错误。
41
- - `DbTrans` 提交成功后先归还连接,再执行提交后通知。通知失败不能把已提交事务报告为回滚,也不能自动重放业务 SQL。调用者仍必须使用 `using`,防止业务异常绕过 Commit/Rollback。
42
- - `DatabasePoolExhausted`、`DatabaseCapacityExceeded`、`DatabaseEndpointUnreachable` 是不同故障;不要把应用池等待、数据库全局连接限制和慢 SQL 混为一谈。
43
- - 平台未显式配置的 MySQL 业务池上限为 100,最小池保持驱动默认 0,连接串显式值优先;不得因为数据库拒绝连接自动放大池。每节点/租户、独立读写池、Quartz 与外部客户端的容量须合计并保留管理余量。`Connection Lifetime` 是归还时按创建时间淘汰,不能当空闲超时。
44
- - 可信 C# 宿主通过 `Database.GetConnectionPoolSnapshot()` 读取脱敏状态,`ResetConnectionPool()` 只轮换准确匹配的 MySQL/SQL Server 池,`ProbeConnectionPoolAsync` 用原池执行固定 `SELECT 1`。不使用 `ClearAllPools`,不杀借出的事务,不重放 SQL。
45
- - 快照的 `MinimumPoolSize/ConnectionLifetimeSeconds` 是配置;`Database.GetConnectionPoolBudgetSnapshot` 按所选池身份去重合计最大/最小池。`CurrentNodeSelectedPools` 不包含其它节点、Quartz、扩展库或外部程序,不是已占用连接;未知驱动合计为 null,无池连接单列且不受池上限限制。
46
- - `BeginIsolatedConnections()` 仅用于有并发限制的可信应急鉴权作用域,设置无池连接与 5 秒连接/命令超时;未知驱动拒绝。不能给普通业务或 V8 增加绕过限流的开关,不能在此作用域内执行清池或把无池探测冒充原池恢复。
47
- - AI 在线恢复使用 `microi_manage_system_observability(action=ResetDatabasePools)` 的预览、确认和回读协议,详细决策见 [系统日志/监控](../system-observability/SKILL.md)。需要升级含 `database-pools/v1` 的后端和 MCP;事故恢复本身不要求重启数据库/API。
48
-
49
- - 数据值全程参数化;`FromSql` 的动态值用 `AddInParameter`。
50
- - 表名、字段名、排序名不能来自未经白名单验证的用户输入。
51
- - 保留 `{0}Name{1}` 标识符延迟绑定机制,不能改成字符串替换。
52
- - `OrderByClip` 的校验不是授权;可排序字段仍需业务白名单。
53
- - Upsert 幂等依赖数据库唯一键,不能只靠“先查再写”。
54
- - 租户业务表查询/写入必须包含真实 `OsClient` 范围。
55
- - 已明确需要的索引在 Microi 业务表上通过 Manifest/MCP 管理,不从临时 SQL 创建。
56
- - MySQL 用户名或密码包含分号时必须用连接字符串引号包裹,例如
57
- `Password="a;b"`;平台统一兼容层只修复“无等号片段紧跟已明确凭据参数”的
58
- 历史串,其它结构错误继续失败关闭,禁止猜测用户名、密码或默认 `root`。
59
-
60
- ## 事务与异步
61
-
62
- ```csharp
63
- using (var trans = dbSession.BeginTransaction())
64
- {
65
- try
66
- {
67
- trans.Insert(entity);
68
- trans.Update<User>(User._.Status, 1, User._.Id == entity.Id);
69
- trans.Commit();
70
- }
71
- catch
72
- {
73
- trans.Rollback();
74
- throw;
75
- }
76
- }
77
- ```
78
-
79
- Dispose 幂等,未 Commit 时自动回滚。事务内异步操作串行执行;不要在同一个连接/
80
- 事务上 `Task.WhenAll`。取消、超时和异常必须传播,不能吞掉后继续 Commit。
81
-
82
- ## 性能与跨库
83
-
84
- - 显式选择字段,分页和流式读取,避免无界 `ToList()`。
85
- - BulkInsert 会按可用客户端选择原生实现并回退多行 INSERT;不同数据库必须实测。
86
- - 官网性能数字仅是特定环境参考,不能作为目标环境承诺。
87
- - 查询缓存 Key 必须包含 SQL 参数值;业务写后考虑失效。
88
- - 读写分离在“写后立刻读”和事务内强制读主。
89
- - 分片使用稳定 Hash;不能使用进程随机化的 `string.GetHashCode()`。
90
-
91
- ## 验收
92
-
93
- - Oracle 原生 `TO_CHAR(value, format[, nlsparam])` 必须保留参数顺序;Provider 不得用
94
- 字符串扫描交换参数。单参数、嵌套函数、格式串中的逗号、注释与字面量也要原样保留。
95
- - `ToArray/ToList` 是查询执行与读取边界,堆栈停在这里不能证明对象转换出错。
96
- 遇到 `ORA-01722`,先用同一账号条件拆分计数/列表,核对最终命令文本与参数类型,
97
- 再执行最小原生 SQL 对照;确定性的转换/语法错误不得用盲目重试或更改业务过滤掩盖。
98
-
99
- - 至少在目标数据库 Provider 运行定向测试,不用 MySQL 结果宣称 Oracle/达梦通过。
100
- - 覆盖 NULL、DateTime、decimal、Guid、enum、byte[] 和分页边界。
101
- - FormEngine 的 decimal 字符串绑定固定使用 `InvariantCulture` 且禁用千分组,防止 `de-DE` / `tr-TR` 把 `1.500000` 转成 `1500000`。类型化 CLR 数值保留原值;无效、本地化逗号或越界仍抛字段转换错误。绑定层修复不能恢复上游 JavaScript 浮点丢失的位数,必须保留原十进制字符串并分别验收实际 Provider 往返与 HTTP 提交。
102
- - 覆盖事务提交/回滚、唯一冲突、超时、取消和连接故障。
103
- - BulkInsert/Upsert 核对受影响行、Identity 跳过、唯一键和重试副作用。
104
- - 读写分离覆盖从库故障、写后读主和降级。
105
- - CodeFirst/索引变更在隔离库验证,不直接对生产执行破坏性重建。
1
+ ---
2
+ name: dos-orm
3
+ description: Dos.ORM C# 数据访问指南。用于 Microi.Server 中编写或审查 DbSession、Entity、From、WhereClip、事务、异步查询、BulkInsert、Upsert、SqlFunc、子查询、导航属性、CodeFirst、读写分离和分库分表代码。
4
+ ---
5
+
6
+ > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
+
8
+ # Dos.ORM
9
+
10
+ Dos.ORM 是 Microi.Server 底层 C# ORM。它不是接口引擎里的 `V8.Db`:
11
+
12
+ - C# 服务端源码使用 `DbSession`、实体和 Section API。
13
+ - V8 JavaScript 使用 `V8.FormEngine` 或 `V8.Db.FromSql`。
14
+ - 不能把 C# lambda/事务示例原样放进 V8。
15
+
16
+ 完整 API、跨库行为与示例见 `references/api-reference.md`。
17
+
18
+ ## 默认选择
19
+
20
+ | 需求 | 首选 |
21
+ |---|---|
22
+ | 普通实体查询 | `dbSession.From<T>().Where(...).ToList/ToListAsync` |
23
+ | 动态条件 | `Where<T>` / `WhereClip` |
24
+ | 复杂 SQL | `FromSql(...).AddInParameter(...)` |
25
+ | 单条/小批写入 | `Insert/Update/Delete` |
26
+ | 大于约 1000 行批量插入 | `BulkInsert/BulkInsertAsync`,先压测批大小 |
27
+ | 按唯一键写入 | `Upsert/UpsertAsync` + 真实唯一索引 |
28
+ | 多步原子写 | `BeginTransaction()`,`using` + Commit/Rollback |
29
+
30
+ ## 方言与种子转换边界
31
+
32
+ - SQL AST、标识符、函数、分页、Upsert 与数据库语义由 Dos.ORM 方言编译器维护;Microi 宿主和 seed CLI 仅作输入/输出适配,不用正则或字符串替换模拟跨数据库 SQL。
33
+ - 官方 MySQL 种子采用流式词法/语法解析,生成完整中性结构与数据模型;每次动态清单以同一来源 SHA 的独立 MySQL 导入为基准,逐表比较结构、行数与数据摘要。历史快照数量不能硬编码为当前源验收,不能用登录夹具或仅结构代替完整种子。
34
+ - 真实数据库认证逐个方言串行运行,保留完整性与失败回执;工具和安装器回归保留在源码中,生成 SQL、ZIP、报告归 `.tmp/` 或正式 CDN。
35
+
36
+ ## 安全规则
37
+
38
+ ### 连接生命周期与在线恢复
39
+
40
+ - 创建事务、准备读取器、打开连接、提交/回滚及批处理任一路径抛异常,都必须释放本层拥有的连接;借用外部事务或批处理连接时不能擅自关闭。保留原始异常,不因 Dispose 失败遮盖原始错误。
41
+ - `DbTrans` 提交成功后先归还连接,再执行提交后通知。通知失败不能把已提交事务报告为回滚,也不能自动重放业务 SQL。调用者仍必须使用 `using`,防止业务异常绕过 Commit/Rollback。
42
+ - `DatabasePoolExhausted`、`DatabaseCapacityExceeded`、`DatabaseEndpointUnreachable` 是不同故障;不要把应用池等待、数据库全局连接限制和慢 SQL 混为一谈。
43
+ - 平台未显式配置的 MySQL 业务池上限为 100,最小池保持驱动默认 0,连接串显式值优先;不得因为数据库拒绝连接自动放大池。每节点/租户、独立读写池、Quartz 与外部客户端的容量须合计并保留管理余量。`Connection Lifetime` 是归还时按创建时间淘汰,不能当空闲超时。
44
+ - 可信 C# 宿主通过 `Database.GetConnectionPoolSnapshot()` 读取脱敏状态,`ResetConnectionPool()` 只轮换准确匹配的 MySQL/SQL Server 池,`ProbeConnectionPoolAsync` 用原池执行固定 `SELECT 1`。不使用 `ClearAllPools`,不杀借出的事务,不重放 SQL。
45
+ - 快照的 `MinimumPoolSize/ConnectionLifetimeSeconds` 是配置;`Database.GetConnectionPoolBudgetSnapshot` 按所选池身份去重合计最大/最小池。`CurrentNodeSelectedPools` 不包含其它节点、Quartz、扩展库或外部程序,不是已占用连接;未知驱动合计为 null,无池连接单列且不受池上限限制。
46
+ - `BeginIsolatedConnections()` 仅用于有并发限制的可信应急鉴权作用域,设置无池连接与 5 秒连接/命令超时;未知驱动拒绝。不能给普通业务或 V8 增加绕过限流的开关,不能在此作用域内执行清池或把无池探测冒充原池恢复。
47
+ - AI 在线恢复使用 `microi_manage_system_observability(action=ResetDatabasePools)` 的预览、确认和回读协议,详细决策见 [系统日志/监控](../system-observability/SKILL.md)。需要升级含 `database-pools/v1` 的后端和 MCP;事故恢复本身不要求重启数据库/API。
48
+
49
+ - 数据值全程参数化;`FromSql` 的动态值用 `AddInParameter`。
50
+ - 表名、字段名、排序名不能来自未经白名单验证的用户输入。
51
+ - 保留 `{0}Name{1}` 标识符延迟绑定机制,不能改成字符串替换。
52
+ - `OrderByClip` 的校验不是授权;可排序字段仍需业务白名单。
53
+ - Upsert 幂等依赖数据库唯一键,不能只靠“先查再写”。
54
+ - 租户业务表查询/写入必须包含真实 `OsClient` 范围。
55
+ - 已明确需要的索引在 Microi 业务表上通过 Manifest/MCP 管理,不从临时 SQL 创建。
56
+ - MySQL 用户名或密码包含分号时必须用连接字符串引号包裹,例如
57
+ `Password="a;b"`;平台统一兼容层只修复“无等号片段紧跟已明确凭据参数”的
58
+ 历史串,其它结构错误继续失败关闭,禁止猜测用户名、密码或默认 `root`。
59
+
60
+ ## 事务与异步
61
+
62
+ ```csharp
63
+ using (var trans = dbSession.BeginTransaction())
64
+ {
65
+ try
66
+ {
67
+ trans.Insert(entity);
68
+ trans.Update<User>(User._.Status, 1, User._.Id == entity.Id);
69
+ trans.Commit();
70
+ }
71
+ catch
72
+ {
73
+ trans.Rollback();
74
+ throw;
75
+ }
76
+ }
77
+ ```
78
+
79
+ Dispose 幂等,未 Commit 时自动回滚。事务内异步操作串行执行;不要在同一个连接/
80
+ 事务上 `Task.WhenAll`。取消、超时和异常必须传播,不能吞掉后继续 Commit。
81
+
82
+ ## 性能与跨库
83
+
84
+ - 显式选择字段,分页和流式读取,避免无界 `ToList()`。
85
+ - BulkInsert 会按可用客户端选择原生实现并回退多行 INSERT;不同数据库必须实测。
86
+ - 官网性能数字仅是特定环境参考,不能作为目标环境承诺。
87
+ - 查询缓存 Key 必须包含 SQL 参数值;业务写后考虑失效。
88
+ - 读写分离在“写后立刻读”和事务内强制读主。
89
+ - 分片使用稳定 Hash;不能使用进程随机化的 `string.GetHashCode()`。
90
+
91
+ ## 验收
92
+
93
+ - Oracle 原生 `TO_CHAR(value, format[, nlsparam])` 必须保留参数顺序;Provider 不得用
94
+ 字符串扫描交换参数。单参数、嵌套函数、格式串中的逗号、注释与字面量也要原样保留。
95
+ - `ToArray/ToList` 是查询执行与读取边界,堆栈停在这里不能证明对象转换出错。
96
+ 遇到 `ORA-01722`,先用同一账号条件拆分计数/列表,核对最终命令文本与参数类型,
97
+ 再执行最小原生 SQL 对照;确定性的转换/语法错误不得用盲目重试或更改业务过滤掩盖。
98
+
99
+ - 至少在目标数据库 Provider 运行定向测试,不用 MySQL 结果宣称 Oracle/达梦通过。
100
+ - 覆盖 NULL、DateTime、decimal、Guid、enum、byte[] 和分页边界。
101
+ - FormEngine 的 decimal 字符串绑定固定使用 `InvariantCulture` 且禁用千分组,防止 `de-DE` / `tr-TR` 把 `1.500000` 转成 `1500000`。类型化 CLR 数值保留原值;无效、本地化逗号或越界仍抛字段转换错误。绑定层修复不能恢复上游 JavaScript 浮点丢失的位数,必须保留原十进制字符串并分别验收实际 Provider 往返与 HTTP 提交。
102
+ - 覆盖事务提交/回滚、唯一冲突、超时、取消和连接故障。
103
+ - BulkInsert/Upsert 核对受影响行、Identity 跳过、唯一键和重试副作用。
104
+ - 读写分离覆盖从库故障、写后读主和降级。
105
+ - CodeFirst/索引变更在隔离库验证,不直接对生产执行破坏性重建。