我们正在将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;
}
}
我认为这是一个有效的修复方法,因为在主键之外使用标识列是公认的做法,但请告诉我,如果我错了。
由于
答案 0 :(得分:1)
修改:2013年5月8日 - 现已在v 1.3.3中修复,可在Breeze网站上找到。
我们没有考虑过Identity列可能不是关键。之前没见过,但这是合理的。请为Breeze User Voice添加请求。我们非常重视这些要求。我还将调查一个临时解决方法,但这可能需要几天时间。