2012-05-04 5 views
3

나는이 내 '카테고리'개체에 대한 다음과 같은 모델 클래스 : 이것은 '카테고리'내 능통 자 NHibernate 매핑 클래스는 유창함 NHibernate에 매핑 트리

public virtual int Id { get; set; } 
public virtual string Name { get; set; } 
public virtual Category ParentCategory { get; set; } 

public virtual IList<Category> SubCategories { get; set; } 

입니다

: 이 관련 있다는

Id(x => x.Id).GeneratedBy.Native(); 

Map(x => x.Name); 
References(x => x.ParentCategory).Column("ParentCategoryId"); 

// ** THE BELOW MAPPING IS WHAT I'M UNSURE ABOUT ** 
HasMany(x => x.SubCategories).Where(x => x.Id == x.ParentCategory.Id); 

내 데이터베이스는 루트 레벨에있는 (그리고 가지고 ParentCategoryId = NULL) 일부는 '범주'의 숫자로 구성되어 있으며 다른 모든 하위 범주 승이다 hich는 1 단계 깊이 일 수도 있고, 3,4,5 단계 깊이 일 수도 있습니다 (재귀 부모는 루트/부모 CategoryId까지 백업합니다. 행/기록 사이의 관계의

예 :

Cars (Id = 1 - ParentCategoryId = NULL) 
Cars (Id = 1) > Hatchback (Id = 2 - ParentCategoryId = 1) 
Cars (Id = 1) > Hatchback (Id = 2) > Ford (Id = 3 - ParentCategoryId = 2) 

Motorcycles (Id = 4 - ParentCategoryId = NULL) 
Motorcycles (Id = 4) > Scooters (Id = 5 - ParentCategoryId = 4) 

내 Category 클래스 내의 '하위'속성이 현재 카테고리의 'ParentCategoryId'가 모든 카테고리를 검색 할 필요가있다 (ID) , 그러나 나는 이것을 매핑하는 방법에 대해 확신 할 수 없다. 위의 예제에 표시된 HasMany 매핑을 시도했지만 실패했습니다.

답변

3

난 그냥 다음에, hasMany의 매핑을 변경하여이에 대한 작업 솔루션을 구현 한 생각 : 나는 위를 구현할 때

HasMany(x => x.SubCategories) 
.Cascade.AllDeleteOrphan() 
.KeyColumn("ParentCategoryId") 
.Where(x => x.ParentCategory.Id == x.Id) 
+0

, 내가 범주와 하위 범주의 올바른 관계를 얻는다. 예 : 1 => 4,5; 2 => 6,7. 그러나 나는 또한 목록 하위 범주를 얻는다. 그래서 마지막 모습은 1 => 4,5; 2 => 6,7; 4; 5; 6; 7. 실제로 하위 범주 인 4-7도 범주에서 동일한 수준으로 검색됩니다. 나는 너에게 의미가 있기를 희망한다. 어떻게 그걸 해결 했니? – jaxxbo