Breeze.Sharp必填字符串字段空值验证异常及初始化问题咨询
Breeze.Sharp 0.9.1 必填字符串属性空值验证问题解析
问题场景
- 模型包含Breeze认定为「必填字段」的字符串属性(如主键、TPH鉴别器属性)时,Breeze会拦截空字符串值,触发验证错误:
‘MyProperty’ is a required field
- 从项目模板自带的
Breeze.Sharp.Standard.Fork升级到Breeze.Sharp 0.9.1后出现此问题,旧版本无该限制。 - 特殊异常:部分属性即使在保存前已设置非空值,仍会触发错误——根源是保存用的DTO未初始化非空字符串值,后续赋值无法覆盖Breeze的初始状态快照,临时解决办法是将属性初始化为
" "这类非空值。
问题本质
- 有意的设计调整:官方Breeze.Sharp 0.9.1恢复了对核心必填字段(主键、TPH鉴别器)的严格空值验证——这类属性为空字符串会直接破坏实体追踪、TPH映射等核心功能,旧版本的fork可能移除了这部分校验逻辑,所以升级后出现差异。
- 边界bug:对于未初始化的字符串属性,.NET默认值为
null,Breeze会将其判定为不符合必填要求;同时Breeze的实体状态追踪依赖初始值快照,若初始值为null/空字符串,后续赋值后验证逻辑仍可能读取初始快照,导致赋值后仍报错。
优化解决办法
- 在实体类构造函数中统一初始化所有必填字符串属性为
string.Empty(比" "更规范,避免不必要的空格) - 若需针对非核心属性放宽限制,可通过自定义Breeze验证规则调整校验逻辑(不推荐对主键/鉴别器做此操作)
- 检查实体元数据定义,确认是否误将非必填属性标记为必填,修正元数据即可解除不必要的校验
内容的提问来源于stack exchange,提问作者Paul Elliott
相关产品推荐
相关产品推荐

