Couchbase N1QL용 공식 Linq 공급자의 개발자 프리뷰 #1을 발표하게 되어 매우 기쁩니다! 이것은 공급자를 소개하고, 기본 기능을 미리 살펴보고, 사용 방법을 설명하기 위한 매우 초기 사전 릴리스입니다. 이 블로그에서는 오늘 공급자를 사용하는 방법에 대한 단계를 살펴보는 샘플 애플리케이션을 만들겠습니다.
면책 조항
사전 릴리스이므로 베타 버전이 출시될 때까지 공개 API가 크게 변경될 것으로 예상됩니다. Couchbase.Linq 프로젝트는 SDK의 GA 릴리스에 따라 달라진다는 점에 유의하세요. 2.2.0 SDK의 GA가 출시될 때까지 프로덕션 환경에서 이 공급자를 사용하지 마세요!
패키지 받기
이 패키지는 NuGet에 사전 릴리스되어 있으며 다음에서 찾을 수 있습니다. 여기. Visual Studio를 사용하는 경우 프로젝트에 종속 요소를 포함하려면 NuGet 패키지 관리자 또는 NuGet 패키지 관리자 콘솔을 사용해야 할 것입니다.
먼저 Visual Studio를 사용하여 콘솔 애플리케이션을 만듭니다. 그런 다음 패키지 관리자를 사용하여 Couchbase.Linq를 검색합니다:
검색할 때 "사전 릴리스 포함"을 선택하지 않으면 패키지가 검색 결과에 나타나지 않습니다. "설치"를 클릭하면 모든 종속성이 자동으로 설치됩니다. 마지막으로 패키지 관리자 대화 상자를 닫습니다.
구성 및 초기화
현재 Couchbase Linq 공급자는 Couchbase .NET 2.1 SDK의 ClusterHelper 클래스에 대한 하드 종속성을 가지고 있습니다. ClusterHelper는 성능상의 이유로 수명이 길어야 하는 버킷 및 기타 리소스를 쉽게 관리할 수 있게 해주는 클래스입니다. 클러스터 객체에는 싱글톤이고 버킷 참조에는 "멀티톤"입니다. 이 종속성은 향후 버전에서 제거될 가능성이 높지만 애플리케이션에서 Linq 공급자를 사용할 때는 반드시 고려해야 합니다.
이 종속성을 처리하려면 애플리케이션에서 클러스터헬퍼를 사용하고 애플리케이션의 수명 기간 동안 명시적으로 Initialize()를 한 번만 호출하면 됩니다. 기본적으로 localhost는 클라이언트를 부트스트랩하는 데 사용되지만 원하는 대로 사용자 지정할 수 있는 ClientConfiguration을 사용하는 오버로드를 사용할 수 있습니다.
위의 요점에서는 새 구성을 생성하고 로컬에 설치된 Couchbase Server 인스턴스를 부트스트랩 대상으로 지정합니다. 그런 다음 Initialize를 호출하고 구성을 전달하여 클러스터 헬퍼 객체를 초기화합니다.
DbContext 인스턴스 만들기
ClusterHelper를 초기화한 후에는 기본 데이터 저장소(Couchbase 버킷)를 추상화하고 쿼리를 작성하고 (곧) 버킷에 다시 제출될 변경 사항을 함께 그룹화하는 수단을 제공하는 DbContext 객체를 생성합니다.
DbContext 생성자는 클러스터 객체를 받은 다음 쿼리에 사용할 카우치베이스 버킷의 이름을 받습니다.
DbContext를 생성하면 계속해서 반복해서 사용할 수 있으며, 그 자체에 대해 조인을 수행할 수도 있습니다. 다음 글에서는 DbContext에서 상속하여 버킷 내의 문서에 매핑되는 구체적인 쿼리 객체를 만드는 방법을 보여드리고, 궁극적으로는 버킷에서 이러한 객체를 자동으로 생성하는 도구 지원도 제공할 예정입니다.
Linq 쿼리 작성
Linq 쿼리를 만드는 것은 대부분의 경우 다른 Linq 제공업체를 사용하는 것과 다르지 않습니다. 다만 Linq2Couchbase가 N1QL 키워드와 NEST, UNNEST 및 USE KEYS와 같은 개념을 지원한다는 점이 다릅니다.
모든 Linq 쿼리와 마찬가지로 열거할 때까지 실행이 지연됩니다:
여기서는 이전 단계에서 생성한 쿼리를 단순히 열거하고 있습니다. 공급자는 생성된 표현식을 가져와서 N1QL 쿼리로 변환하고 응답의 행 부분만 반환하는 쿼리를 실행합니다. 예외는 Linq 공급자에 의해 발생하며, 이는 IQueryResult 구현의 속성으로 예외를 반환하는 Couchbase SDK와는 다른 동작이라는 점에 유의하세요.
WHERE 절은 어떻게 되나요?
문서 유형별로 필터링하기 위해 WHERE 절을 지정하지 않은 것을 보셨나요? 버킷은 이기종 문서의 키 공간이기 때문에 결과를 필터링할 술어가 없으면 쿼리가 생성되면 버킷 내의 모든 문서의 모든 단일 Name 속성이 반환됩니다(맥주 샘플 버킷에는 맥주와 양조장 문서 유형이 있음). DRY 상태를 유지하고 싶고 모든 쿼리에 대해 WHERE type="[document-type]"을 추가하는 것은 지루할 수 있으므로, 문서 필터를 투영에 사용하는 POCO의 속성으로 지정하는 방법이 있습니다.
여기 POCO 정의에서 EntityTypeFilter를 추가하고 쿼리로 타겟팅할 문서 유형으로 "맥주"를 지정했습니다. 멋지네요!
결론
패키지를 설치하고 사용해 보세요. 여러분의 의견을 알려주시고 버그를 발견하거나 기능 요청이 있는 경우 Jira 티켓 또는 풀 리퀘스트!