2013-08-14 2 views
1

나는 RavenDB와 협력 중이며, 뭔가하려고하고있다. 두 가지 클래스, 즉 User와 ApplicationInstance가 파생 된 기본 형식 인 Principal이 있습니다. 내 응용 프로그램에서는 User 및 ApplicationInstance의 인스턴스를 만들어 자주 저장해야합니다. 그러나 데이터베이스에 저장된 모든 Principal 개체를 한 번에 쿼리하고, 지정된 Principal이 User인지 ApplicationInstance인지 확인한 다음 전체 User 또는 ApplicationInstance 개체를 쿼리 할 수 ​​있어야합니다.RavenDB polymorphic 인덱스

어떻게하면됩니까?

+0

주제에 관한 공식 문서 - [다형성 데이터 색인 생성] (https://ravendb.net/docs/article-page/3.5/all/indexes/indexing-polymorphic-data) –

답변

1

무엇을하려하십니까? 최종 결과가 모든 사용자를 쿼리하는 것이면 전체 사용자 또는 AppInstance를로드하십시오. 모든 사용자 또는 모든 AppInstance를 쿼리하기 만하면됩니다.

Raven은 기본 클래스를 저장하지 않습니다. 가장 파생 된 유형 (사용자 또는 AppInstance) 만 저장합니다. 따라서 사용자 컬렉션과 AppInstance 컬렉션을 갖게됩니다.

두 가지를 동시에 쿼리해야하는 경우 Multi Map indexes을 사용할 수 있습니다. 또한 엔티티 이름을 변경하고 둘 다 단일 Principal 콜렉션에 저장할 수 있습니다.

하지만 무엇을 하려는지 모른 채 솔루션을 추천하는 것은 어렵습니다. 당신이하려는 일에 대해 설명해 주시면 적절한 방법을 알려 드리겠습니다.

+1

글쎄, 나는 리소스에 대한 액세스를 관리합니다. 데이터베이스에 저장된 많은 문서에는 Principal 객체 (해당 Id)와 해당 principal이 소유 한 사용 권한 (예 : 읽기, 쓰기, 삭제, 소유권 변경)에 해당하는 일종의 ACL이 들어 있습니다. 나는 ACL에서 Principal의 Id를 받으면 일반 Principal 객체 나 특정 AppInstance 또는 User를 쿼리하려고했습니다. 여기에 무슨 뜻입니까 : 'Principal p = session.Load (id); if (p is AppInstance) {...} elseif (p is User) {...}' 아니면 그냥 잘못된 아이디어가 있습니까? –

+0

. (id)을로드하면 어떻게됩니까? 너 뭐 돌아온거야? Raven이 타입 매개 변수로 보낸 것과 관계없이 올바른 객체를 돌려 주길 기대합니다. –

2

UserApplicationInstance 컬렉션을 원본으로 사용하는 Multi Map Index을 정의 할 수 있습니다. 당신이 (AbstractMultiMapIndexCreationTask<>를 구현하여) C# 코드를 사용하여 인덱스를 정의하면

, 당신은 당신이 까마귀를 사용하여 인덱스를 정의하면

(위의 블로그 게시물 링크에 도시 된 바와 같이) 그것을 달성하기 위해 두 번 AddMap를 호출해야합니다 Studio에서 Add Map 버튼을 클릭하면 추가지도를 정의 할 수있는 새로운 텍스트 영역이 생깁니다.

그러나 두 맵의 출력 구조는 동일한 속성을 가져야합니다 (SQL의 UNION과 거의 비슷 함).

+0

멀티 맵은 여기로가는 길입니다. 변형 결과를 사용하여 원칙을 결과 문서의 속성으로로드하여 서버에 더 많은 내용을 저장할 수도 있습니다. –