我们在从服务器到客户端加载所有非常大的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。
我错在哪里或如何解决?
答案 0 :(得分:0)
这不是与微风有关的问题。该库将简单地尝试将基元类型直接分配给实体的属性。这显然是JavaScript的一个问题。我认为你达到了Number类型的最大值。
只需尝试将25776087313154051分配给某个属性,您将获得值25776087313154052。
我不确定,但JavaScript处理大数字似乎是一个奇怪的问题。也许你可以在阅读规范时获得更多信息。 http://ecma262-5.com/ELS5_HTML.htm#Section_8.5
您可能尝试避免此问题的方法是将id属性的类型更改为string。