Breeze使用PascalCased初始值创建实体

时间:2015-12-08 02:59:58

标签: 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在查询上做的事情,但是在创建初始化器中。

1 个答案:

答案 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);