2013-05-07 47 views
0

我们使用BreezeJS作为项目。这是一个非常棒的工具,感谢您创建它!在元数据解析中使用不正确的autoGeneratedKeyType Breeze

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

在您的客户端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

编辑:2013年5月8日 - 这是现在固定为V 1.3.3和可用的微风网站上。


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