Breeze 发布删除1至(0..1)“;“儿童”;是否使用相同的主键记录?
例如,我们有一个父表:Breeze 发布删除1至(0..1)“;“儿童”;是否使用相同的主键记录?,breeze,Breeze,例如,我们有一个父表: 父ID(主键) 父类型 …根据父类型,还有一些其他详细信息表,例如ParentType1Detail: 父ID(主键) 更多特定于类型1父级的字段 Parent和ParentType1Detail都具有相同的ParentID主键,形成1到(0..1)关系 现在考虑一下微风中的一个情况,我们在缓存中有一个现有的父和PrimeType细节。用户将父项更改为“Type2”,因此我们希望删除ParentType1详细记录。当我们调用parentType1Detail.en
- 父ID(主键)
- 父类型
- 父ID(主键)
- 更多特定于类型1父级的字段
现在考虑一下微风中的一个情况,我们在缓存中有一个现有的父和PrimeType细节。用户将父项更改为“Type2”,因此我们希望删除ParentType1详细记录。当我们调用parentType1Detail.entityAspect.setDeleted()时,Breeze似乎也会返回并将父实体上的ParentID属性置零,从而杀死父实体的主键
这对于正常关系来说是有意义的,在这种关系中,父级具有ChildID属性,该属性为详细信息表设置了键,但如果联接属性也是父级主键的一部分,则该属性不起作用 如果这一点不清楚或已经讨论过,我深表歉意,但如果您对如何处理上述问题有任何建议(不要对数据库进行太多重构),我将不胜感激。或者Breeze可以处理这种情况,而我们的EF配置不知何故是错误的更新:黑客解决问题(希望如此) defaultPropertyInterceptor中包含以下代码:
// update fk data property
if (property.relatedDataProperties) {
if (!entityAspect.entityState.isDeleted()) {
var inverseKeyProps = property.entityType.keyProperties;
inverseKeyProps.forEach(function(keyProp, i ) {
var relatedDataProp = property.relatedDataProperties[i];
var relatedValue = newValue ? newValue.getProperty(keyProp.name) : relatedDataProp.defaultValue;
that.setProperty(relatedDataProp.name, relatedValue);
});
}
}
如果相关属性是entities键的一部分,我们插入了一个测试以抑制更改:
// update fk data property
if (property.relatedDataProperties) {
if (!entityAspect.entityState.isDeleted()) {
var inverseKeyProps = property.entityType.keyProperties;
inverseKeyProps.forEach(function(keyProp, i ) {
var relatedDataProp = property.relatedDataProperties[i];
// Do not trash related property if it is part of that entity's key
if (newValue || !relatedDataProp.isPartOfKey) {
var relatedValue = newValue ? newValue.getProperty(keyProp.name) : relatedDataProp.defaultValue;
that.setProperty(relatedDataProp.name, relatedValue);
}
});
}
}
很抱歉花了这么长时间看这个。我喜欢你的建议。我将尝试在下一个版本的Breeze中加入它,并在它出现时在这里发布。和thx供款:)