Breeze 使用 PascalCased 初始值创建实体

Breeze Create Entity with PascalCased initial values

我有一个 Angular + Breeze + WebApi(EF) 设置,在查询数据时效果很好。 breezeProvider 在客户端默认设置为 camelCase,在服务器端设置为 PascalCase。

bp.NamingConvention.camelCase.setAsDefault();

我遇到的问题是通过 signalR 将新数据推送到我的应用程序时。数据从 .NET 堆栈到达 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 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);