2014-02-10 4 views
0

매우 큰 Int64 값을 서버에서 클라이언트로 모두로드하는 데 문제가 있습니다. 문제는 25776087313154050보다 큰 모든 숫자에 해당합니다. Breeze의 DB 접근 방식을 사용하지 않고 모든 메타 데이터를 수동으로 만듭니다.매우 큰 Int64 값의 Breeze Js로드

다음
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" 
     } 
    } 
}); 

이 서버에서 보여주는 피들러는 (데이터가 여기에 올) 무엇을 :

[{"$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 (Key 부분과 not 부분 모두에 대해) 재현 가능하다는 것을 알았습니다. 언제든지 로이드 로더가 1 씩 증가합니다.

내가 잘못 생각하거나 해결하는 방법에 대한 아이디어가 있습니까?

답변

0

이는 breeze와 관련된 문제가 아닙니다. 라이브러리는 기본 유형을 엔티티의 특성에 직접 할당하려고 시도합니다. JavaScript에 문제가있는 것 같습니다. Number 유형의 최대 값에 도달했다고 생각합니다.

간단한 시도는 속성에 25776087313154051을 할당하고 당신은 잘 모르겠어요 값 25776087313154052.

을 얻을 것이다 그러나와 이상한 문제가 될 것으로 보인다 방법 자바 스크립트 많은 수의 거래. 사양을 읽는 데 더 많은 정보를 얻을 수 있습니다. http://ecma262-5.com/ELS5_HTML.htm#Section_8.5.

문제를 방지하기 위해 시도 할 수있는 것은 id 속성의 유형을 string으로 변경하는 것입니다.

+0

답변을 주셔서 감사합니다. JavaScript에서도 64 비트 정수가 지원되지 않습니다. 그러나 Breeze가 그러한 데이터 유형을 지원하기 위해 내부적으로 해결하지 못한 것은 매우 이상한 일이며 메타 데이터에 데이터 유형을 설정할 수는 있지만 직렬화는 지원하지 않습니다. Int64 -> 문자열 변환이 제대로 작동하고 Int64 breeze 데이터 유형을 사용하지 않아야하는 것처럼 보입니다. – Grigorii

+0

나는 그것이 당신을 위해 일해서 다행이다. 질문에 답변으로 표시 할 수 있습니까? – ppoliani

+0

네, 다른 아이디어를 기다리고 있습니다. 누군가 Breeze와 관련된보다 효율적인 솔루션을 알고 있을지도 모릅니다. – Grigorii