我有一个Angular + Breeze + WebApi(EF)设置,在查询数据时非常有效。 breezeProvider默认设置为客户端上的camelCase,服务器端设置为PascalCase。
bp.NamingConvention.camelCase.setAsDefault();
我遇到的麻烦是将signalR上的新数据推送到我的应用程序。数据从.NET Stack到达PascalCased(Breeze明确表示不要弄乱服务器上的外壳)。然后我使用标准工厂创建一个新实体并尝试使用传递的值初始化它。由于初始化哈希都是PascalCased,因此大多数属性都无法正确初始化。有没有办法告诉Breeze它应该像查询时那样转换这些数据?我还没有成功。基本上,我只是希望Breeze对待它,就像处理它收到的所有数据一样。
function onSignalRData(call){
var callType = manager.metadataStore.getEntityType("Call");
// call json from server is like { Id: 1, Name: "Paul", IsActive: true }
// I think Breeze expects { id: 1, name: "Paul", isActive: true }
var newCall = callType.createEntity(call);
}
有什么建议吗?我看到Breeze提到了手动定义的命名约定,但我再次做的不是异国情调,只是做了Breeze在查询上做的事情,但是在创建初始化器中。
答案 0 :(得分:0)
这可能不是最佳解决方案,但它似乎对我有用。我使用与formatting json data to be camelCased相同的方法,并使用reviver函数将数据重新解析为camelCase。我很惊讶,在微风entityManager.createEntity(...)中没有可以处理此问题的管道块。
function reviver(key, val) {
if (key)
this[key.charAt(0).toLowerCase() + key.slice(1)] = val;
else
return val;
}
var parsed = JSON.parse(myjson, reviver);