2014-03-07 3 views
0

Breezejs를 'NoDB'모드로 사용하고 있습니다. 즉, 메타 데이터를 직접 작성합니다. 내가 중 하나로, OData 매개 변수와 바람 쿼리를 만들 때 나는 ID로 필터를 추가 (이 String으로 정의되어 있지만)Breezejs 자동 GUID 구문 분석

new breeze.Predicate('iD', datacontext.breeze.FilterQueryOp.Equals, myId) 

var에의 MYID 참으로 GUID 값입니다 말하지만, 내 DB에서 모두 내 서버에 - 사이드 및 클라이언트 측 모델 그것은 문자열 (나는 DB 구조를 변경할 수 없습니다). 내 메타 데이터 모델에서 속성 정의는

dataProperties: { 
    ... 
    iD: { dataType: DataType.String }, 
    ... 
} 

(나는 속성 이름이 이상한 모양을 알고,하지만 난합니다 (breeze.NamingConvention.camelCase.setAsDefault이 있기 때문에 내 데이터 컨텍스트에)이 구문을 사용해야하고, 어떤 강제 연산자 사이에 정의되지 않은 다음 DB에이 호텔의 이름은 ID 내가 쿼리를 실행하면 내가 WebAPI URL에 해당하는 중 하나로, OData 필터 옵션이 서버 오류로 날 리드

$filter=ID eq guid'65BEB144-5C0C-4481-AC70-5E61FDAA840D' 

같은 것을 참조) 대문자로되어 'System.Guid'및 'System.String'을 입력합니다. GUID의 자동 '구문 분석'을 사용하지 않도록 설정하고이를 문자열로 남겨 둘 수있는 방법이 있습니까? 내 webAPI 호출이

$filter=ID eq '65BEB144-5C0C-4481-AC70-5E61FDAA840D' 

과 같을 것이다 있도록 나는 일시적으로 바람의 소스 코드 내에서 직접 구문 분석을 제거하여이 문제를 해결 한하지만 난이 솔루션을 좋아하지 않는 한 더 나은이 있다면 나는 기쁠 어떤면에서이 행동을 매개 변수화하는 것. 나는 Breeze의 공식 웹 사이트에서 이것에 관해 아무 것도 발견하지 못했습니다.

답변

2

Breeze는 해당 메타 데이터를 사용하여 쿼리의 각 속성 데이터 유형을 확인한 다음이 정보를 사용하여 올바른 OData 필터를 생성합니다. 따라서 문자열로 ID의 메타 데이터 정의가 정확해야합니다.

그러나이 작업을 수행하려면 breeze가 쿼리의 EntityType을 알아야합니다. 다음 쿼리의 예를 들어

var q = EntityQuery.from("Foo").where(....) 

바람 "푸"(A resourceName이가)에 해당하는 EntityType을 알 필요가있다. 엔티티 유형이 있으면이 엔티티 유형의 특정 등록 정보에 대한 필터를 올바르게 형식화 할 수 있습니다. breeze에 'EntityType'이 없으면 각 속성의 데이터 유형에 대한 추측으로 바뀝니다. 귀하의 경우, 자사는 데이터 형식

그래서 수정하면 쿼리하는 EntityType에 대해 직접 쿼리를 얘기 중 하나 인 '가이 드'이라고 추측

var q = breeze.EntityQuery.from("Foo).where(....).toType(FoosEntityType); 

또는 당신은 더 많은 세계를 통해 처리 할 수 MetadataStore.setEntityTypeForResourceName 메소드를 통해.

breeze.MetadataStore.setEntityTypeForResourceName("Foo", FoosEntityType); 
var q = breeze.EntityQuery.from("Foo).where(....); // your original query