【问题标题】:Breeze Create Entity with PascalCased initial valuesBreeze 创建具有 PascalCased 初始值的实体
【发布时间】:2015-12-08 22:42:04
【问题描述】:

我有一个 Angular + Breeze + WebApi(EF) 设置,在查询数据时效果很好。客户端默认为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 在查询中所做的相同的事情,但在创建初始化程序中。

【问题讨论】:

    标签: javascript signalr breeze


    【解决方案1】:

    这可能不是最好的解决方案,但它似乎对我有用。我使用了与formatting json data to be camelCased 相同的方法,并使用 reviver 函数重新解析数据以进行驼峰式处理。我很惊讶微风 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多