优化 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>