0

我们在将所有非常大的 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}]

微风查询非常简单:

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

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

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

因此,第二个实体的 ID 正确加载并具有值:25776087313154050对于客户端和服务器。但是对于25776087313154051客户端上的服务器值,它的25776087313154052.
我做了一些实验,发现所有数字> 25776087313154050(对于关键部分和非关键部分)都可以重现该问题。每次微风装载机将数字增加 1。

有什么想法我错了或如何解决?

4

1 回答 1

0

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

简单尝试将 25776087313154051 分配给属性,您将获得值 25776087313154052。

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

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

于 2014-02-10T14:41:14.393 回答