javascript - Breeze 使用 PascalCased 初始值创建实体

标签 javascript signalr breeze

我有一个 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 在查询上但在创建初始值设定项中所做的相同的事情。

最佳答案

这可能不是最好的解决方案,但它似乎对我有用。我用的方法和formatting json data to be camelCased一样并使用 reviver 函数将数据重新解析为驼峰命名法。令我惊讶的是, Breeze 实体管理器.createEntity(...) 中没有管道 block 可以处理这个问题。

function reviver(key, val) {
    if (key)
        this[key.charAt(0).toLowerCase() + key.slice(1)] = val;
    else
        return val;
}

var parsed = JSON.parse(myjson, reviver);

关于javascript - Breeze 使用 PascalCased 初始值创建实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34147219/

相关文章:

javascript - dygraphs - 摆脱 "sparkline"样式图表的黑色 x 和 y 轴?

azure - 使用 Azure Servicebus 背板时出现奇怪的间歇性 SignalR 故障

c# - SignalR .NET 6 客户端未添加处理程序

breeze - "Internal Error in key fixup - unable to locate entity"错误但数据库按预期更新

IE8 中的 Javascript 消息超出堆栈空间

javascript - 自定义 SingleValue 和选项 react 选择 - 选项显示,但 SingleValue 不显示

javascript - Jquery javascript 使用 $this 折叠

swift - .NET CORE 2.1.403 SignalR 官方支持 Swift

scala - Scala Breeze 中的矩阵乘法向量

javascript - 使用jquery加载外部文件,然后引用它