ASP.NET中如何使估算调用的预算数据不受原预算修改影响?
ASP.NET预算与估算数据隔离方案实现
核心机制
采用快照式副本存储,为每个估算实例生成独立的预算数据快照,快照一经创建便固定不变,彻底切断原预算数据变更对估算的影响。
具体实现步骤
- 快照触发时机:用户在估算模块选定关联预算数据的瞬间,立即执行快照生成操作,确保获取的是当前时刻的预算数据状态。
- 副本表设计:
- 创建独立的
EstimateBudgetSnapshot表,字段结构与原预算表(如Budget)完全匹配,额外新增EstimateId字段用于关联对应的估算记录。 - 执行快照插入时,直接将选中预算条目的所有字段值复制到
EstimateBudgetSnapshot表,保证数据完全复刻。
- 创建独立的
- 数据读取逻辑:估算模块所有涉及预算数据的展示、计算场景,均从
EstimateBudgetSnapshot表读取,不再直接访问原Budget表。
效果验证示例
原预算表
Budget数据:Column A = "A",Column B = 1
估算选择该预算条目后,EstimateBudgetSnapshot新增记录:EstimateId = 1001,Column A = "A",Column B = 1
后续修改原Budget表中"A"对应的Column B值为2,估算模块读取快照数据仍返回Column B = 1,不受原数据变更影响。
优化建议
- 按需复制:仅复制估算实际关联的预算条目,避免全量复制造成的存储冗余。
- 事务保障:将估算记录创建与快照插入操作封装在同一事务中,确保数据一致性,防止出现有估算无对应快照的异常情况。
- 索引优化:为
EstimateBudgetSnapshot表的EstimateId字段建立索引,提升估算模块读取快照数据的查询性能。
内容的提问来源于stack exchange,提问作者plet9090
相关产品推荐
相关产品推荐

