Breeze在元数据解析中使用不正确的autoGeneratedKeyType

时间:2013-05-07 04:38:36

标签: primary-key identity breeze

我们正在将BreezeJS用于项目。这是一个很棒的工具,感谢创造它!

我有一个包含两列主键的表。此表上还有一个不属于主键的标识列。

在客户端JS(作为元数据解析的一部分),函数parseCsdlSimpleProperty在解析标识列后将entityType的autoGeneratedKeyType设置为“Identity”,即使它不是密钥的一部分:

var isPartOfKey = keyNamesOnServer != null && keyNamesOnServer.indexOf(csdlProperty.name) >= 0;
    if (parentType.autoGeneratedKeyType == AutoGeneratedKeyType.None) {
        if (isIdentityProperty(csdlProperty)) {
            parentType.autoGeneratedKeyType = AutoGeneratedKeyType.Identity;
        }
    }

在将实体保存回数据库后,这会给我们带来问题。调用saveChanges()后返回的实体具有错误的KeyMapping,导致“密钥修正中的内部错误 - 无法定位实体”错误。

我在本地副本中更改了它,以检查此属性是否属于主键:

var isPartOfKey = keyNamesOnServer != null && keyNamesOnServer.indexOf(csdlProperty.name) >= 0;
    if (parentType.autoGeneratedKeyType == AutoGeneratedKeyType.None && isPartOfKey) {
        if (isIdentityProperty(csdlProperty)) {
            parentType.autoGeneratedKeyType = AutoGeneratedKeyType.Identity;
        }
    }

我认为这是一个有效的修复方法,因为在主键之外使用标识列是公认的做法,但请告诉我,如果我错了。

由于

1 个答案:

答案 0 :(得分:1)

修改:2013年5月8日 - 现已在v 1.3.3中修复,可在Breeze网站上找到。


我们没有考虑过Identity列可能不是关键。之前没见过,但这是合理的。请为Breeze User Voice添加请求。我们非常重视这些要求。我还将调查一个临时解决方法,但这可能需要几天时间。