song.jun
5 天以前 ed655574fc9dc7c6c67dceddcdebb7a25c16d244
refs
用户 song.jun <lion0756@qq.com>
星期一, 四月 13, 2026 13:07 +0800
提交者 song.jun <lion0756@qq.com>
星期一, 四月 13, 2026 13:07 +0800
提交ed655574fc9dc7c6c67dceddcdebb7a25c16d244
目录 019c7887e3a6b4fcf8f7719685d367e11afe6a23 目录 | zip | gz
parent 712de30133f921b5ac1f1ae2a1b77fff8b709c20 查看 | 对比
优化 SaveLabList 路径的 DB 查询次数(P2.5)

之前 QCDistributionInfoViewModel.ToEntity 对 LabList 里的每个条目做
3 次独立 DB 查询(ToEntity 内部按 Id 查、查重按 LabId+ProjectId 查、
删除分支按 Id 查),100 行 LabList 就是 ~300 次 round-trip + 每次
Save 自己的 SaveChanges,在线上实际请求耗时几秒到十几秒。

优化:
- QCDistributionRegisterInfoViewModel.ToEntity 加重载 (viewModel,
preloadedExisting),允许调用方传入已查好的 tracked entity 跳过内部
DB 查询;原签名保留(fallback 到 DB 查)不影响其他调用方。
- SaveLabList 循环前一次性 WHERE QCDistributionId=? 拉取当前分发全部
登记到内存,建 byId / byLabProject 两个字典,循环内走字典查找。
- 罕见的跨分发 Id 引用走 DB fallback 保持原有语义。
- 删除分支直接复用已缓存的 cachedExisting,去掉独立查询。

100 行 LabList 的 DB round-trip 从 ~300 次降到 1 次预加载 + 实际
Save/Delete 次数。第一道防线和第二道防线的查重语义不变。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2个文件已修改
43 ■■■■■ 已修改文件
sbcLabSystem/Models/Backstage/QCDistributionInfoViewModel.cs 35 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
sbcLabSystem/Models/Backstage/QCDistributionRegisterInfoViewModel.cs 8 ●●●● 对比 | 查看 | 原始文档 | blame | 历史