Skip to content

v1.1.79

Choose a tag to compare

@gishys gishys released this 14 Nov 08:16
· 52 commits to main since this release

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 的操作不受影响
  • 直接使用复合主键的代码需要调整
  • 创建节点时不再需要传递版本信息

迁移步骤

  1. 备份数据库
  2. 执行提供的迁移脚本
  3. 验证数据完整性
  4. 更新相关业务代码

重要提醒

  • WkDefinitionVersion 字段仍然保留,用于外键关联
  • 节点必须通过 AddWkNode 方法添加以确保版本正确性
  • 更新操作不会修改定义ID和版本,需使用 SetDefinition 方法

🔧 技术细节

删除行为策略

场景 策略 说明
核心业务数据 Restrict 防止删除正在使用的实体
运行时数据 Cascade 自动清理相关数据
分组关系 SetNull 保留数据,解除关系
可重用组件 Restrict 保护共享组件

数据完整性

  • 应用层检查与数据库约束双重保护
  • 外键关系全面配置,避免数据不一致
  • 迁移脚本包含数据验证和修复

📋 验证清单

  • 所有主键修改正确实施
  • 外键删除行为配置完整
  • 迁移脚本测试通过
  • 业务逻辑兼容性验证
  • 性能基准测试

本次优化显著提升了系统的数据完整性和可维护性,为后续功能扩展奠定了更坚实的基础。