Repository navigation
v1.1.79
WkNode 主键优化与 EF Core 外键行为优化版本发布
🚀 版本亮点
本次发布对工作流引擎的数据模型进行了重大优化,简化了主键结构,增强了数据完整性保护,提升了系统稳定性和维护性。
✨ 主要改进
1. WkNode 主键简化
- 主键变更: 将
WkNode从复合主键(Id, Version)改为单一主键Id - 字段重命名:
Version字段更名为WkDefinitionVersion,明确其作为外键的用途 - 相关实体调整:
WkNodeCandidate、WkNodePara、WkNode_ApplicationForms同步移除 Version 字段
2. EF Core 外键删除行为优化
全面配置了实体关系的删除行为,确保数据完整性和一致性:
- 保护核心数据: 工作流实例与定义版本关联使用
Restrict,防止误删 - 自动清理运行时数据: 审核记录、错误日志、订阅等运行时数据使用
Cascade自动清理 - 智能分组管理: 定义分组和表单分组使用
SetNull,删除组时保留数据并解除关系 - 保护可重用组件: 步骤体和应用表单使用
Restrict,防止删除正在使用的组件
📝 详细变更
实体模型优化
- WkNode: 简化构造函数,移除
wkDefinitionVersion参数 - 新增 SetDefinition 方法: 统一设置定义ID和版本,确保数据一致性
- DTO 精简:
WkNodeCreateDto移除版本字段,创建更简洁
数据库迁移
- 执行主键结构调整脚本
- 更新所有外键约束
- 删除冗余 Version 字段
- 验证数据完整性
🎯 优势
架构改进
- ✅ 更清晰的主键结构
- ✅ 明确的版本控制范围
- ✅ 更好的封装性
- ✅ 减少数据冗余
性能提升
- ⚡ 单一主键查询性能优化
- ⚡ 索引大小减少
- ⚡ 数据一致性增强
开发体验
- 🔧 简化的 API 设计
- 🔧 自动化的版本管理
- 🔧 更少的样板代码
⚠️ 升级说明
兼容性影响
- 现有通过
Id查询WkNode的操作不受影响 - 直接使用复合主键的代码需要调整
- 创建节点时不再需要传递版本信息
迁移步骤
- 备份数据库
- 执行提供的迁移脚本
- 验证数据完整性
- 更新相关业务代码
重要提醒
WkDefinitionVersion字段仍然保留,用于外键关联- 节点必须通过
AddWkNode方法添加以确保版本正确性 - 更新操作不会修改定义ID和版本,需使用
SetDefinition方法
🔧 技术细节
删除行为策略
| 场景 | 策略 | 说明 |
|---|---|---|
| 核心业务数据 | Restrict | 防止删除正在使用的实体 |
| 运行时数据 | Cascade | 自动清理相关数据 |
| 分组关系 | SetNull | 保留数据,解除关系 |
| 可重用组件 | Restrict | 保护共享组件 |
数据完整性
- 应用层检查与数据库约束双重保护
- 外键关系全面配置,避免数据不一致
- 迁移脚本包含数据验证和修复
📋 验证清单
- 所有主键修改正确实施
- 外键删除行为配置完整
- 迁移脚本测试通过
- 业务逻辑兼容性验证
- 性能基准测试
本次优化显著提升了系统的数据完整性和可维护性,为后续功能扩展奠定了更坚实的基础。