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(主键)
  • 父类型
…根据父类型,还有一些其他详细信息表,例如ParentType1Detail:

  • 父ID(主键)
  • 更多特定于类型1父级的字段
Parent和ParentType1Detail都具有相同的ParentID主键,形成1到(0..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供款:)