Breeze Js加载了非常大的Int64值

时间:2014-02-10 14:13:15

标签: javascript serialization numbers breeze int64

我们在从服务器到客户端加载所有非常大的Int64值时遇到问题。我认为问题是所有大于25776087313154050的数字。 我们使用Breeze的No DB方法并手动生成所有元数据。这是元数据:

store.addEntityType({
    shortName: "AdditionalInfoType",
    namespace: "Services",
    autoGeneratedKeyType: breeze.AutoGeneratedKeyType.Identity,
    dataProperties: {
        id: {dataType: breeze.DataType.Int64, isNullable: false, isPartOfKey: true },
        name: { dataType: breeze.DataType.String, isNullable: true },
        dataType: { dataType: breeze.DataType.String, isNullable: false, defaultValue: 'Unknown' }
    },
    navigationProperties: {
        enumItems: {
            entityTypeName: "AdditionalInfoEnumValue", isScalar: false, associationName: "AdditionalInfoEnumValue_AdditionalInfoType"
        }
    }
});

这是Fiddler从服务器上显示的内容(数据在这里是正确的):

[{"$id":"1","$type":"Services.AdditionalInfoType, Services",
"Name":"Shoe Size","DataType":"Numeric","EnumItems":null,"Id":25776087313154051},
{"$id":"2","$type":"Services.AdditionalInfoType, Services",
"Name":"Floating Holiday","DataType":"Date","EnumItems":null,"Id":25776087313154050}]

Breeze查询非常简单:

entityQuery.from('AdditionalInfoTypes')
            .toType(entityNames.additionalInfoType)
            .using(employeeManager)

这里我们在客户端有什么(不幸的是我不能在这里发布图片):

entity[0].id == 25776087313154052
entity[1].id == 25776087313154050

因此,第二个实体的Id正确加载并为客户端和服务器提供值25776087313154050。但对于25776087313154051客户端上的25776087313154052服务器值,{{1}} 我做了一些实验,发现所有数字都可以重现的问题> 25776087313154050(关键部分和非关键部分)。每次微风加载器的数量增加1。

我错在哪里或如何解决?

1 个答案:

答案 0 :(得分:0)

这不是与微风有关的问题。该库将简单地尝试将基元类型直接分配给实体的属性。这显然是JavaScript的一个问题。我认为你达到了Number类型的最大值。

只需尝试将25776087313154051分配给某个属性,您将获得值25776087313154052。

我不确定,但JavaScript处理大数字似乎是一个奇怪的问题。也许你可以在阅读规范时获得更多信息。 http://ecma262-5.com/ELS5_HTML.htm#Section_8.5

您可能尝试避免此问题的方法是将id属性的类型更改为string。