0

我们在一个项目中使用 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;
        }
    }

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

谢谢

4

1 回答 1

1

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


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

于 2013-05-08T16:18:20.437 回答