2011-11-03 5 views
3

우선, 현재 진행중인 작업에 대한 명확한 해결책을 찾지 않고 온라인과 여기를 철저히 수색했습니다. 내 수색이 정확하지 않고이 답변이 이미 게시 된 경우 사과드립니다.동시에 두 개의 열을 복합 키와 외래 키로 동시에 처리합니다.

문제는 : 테이블이 있습니다. 이 테이블에는 두 개의 필드에 기본 키가 있어야하며 일부 데이터가 들어있는 다른 필드가 있어야합니다. 기본 키인 두 필드는 각각 다른 테이블에있는 외래 키 여야합니다. 다음과 같은 코드 (유사 코드) :

Product: Id (pk) 
Category: Id (pk) 

ProductCategory: (ProductId (fk on product), CategoryId (fk on category))(pk), SomeOtherField1, SomeOtherField2, etc 

이제 Fluent Nhibernate를 사용하여 구성하는 방법을 찾을 수 없습니다. 이 작업은 EF Code First에서 사소한 일이지만,이 프로젝트에서는 Net 3.5에 머물러있어 사용할 수 없으므로 NHibernate가 유일한 선택이었습니다.

CompositeId(), References() 및 기타 항목을 사용하여 시도했지만 다양한 조합을 시도했지만 아무 것도 작동하지 않았습니다. 내가 가진 오류가 적절하다고 생각하지 않습니다. 단지 이런 시나리오를위한 샘플 작업 구성이 필요합니다.

누구나 Fluent Nhibernate (no xml config)를 사용하여 매핑하는 방법을 알고 있습니까?

답변

5

당신이 당신의 ProductCategory 법인에 실제 ProductCategory 실체가있는 경우 다음 매핑은 다음과 같이 (키가 여기 KeyPropertyKeyReference되지 않습니다) 같아야합니다

CompositeId() 
    .KeyReference(x => x.Product, "ProductId") 
    .KeyReference(x => x.Category, "CategoryId"); 

Map(x => x.SomeOtherField1); 

당신은 당신 ProductCategory의 ID가있는 경우 첫 번째 코드 샘플에서

KeyReferences

CompositeId() 
    .KeyProperty(x => x.ProductId, "ProductId") 
    .KeyProperty(x => x.CategoryId, "CategoryId"); 

Map(x => x.SomeOtherField1); 
는 외래 키 relationsh를 나타냅니다 : 그것은 다음과 같이 보일 것입니다 ips.

+0

정말 이랬습니다. 그 KeyReference를 사용하고 다른 두 엔티티에서 "HasMany"를 제거해야했습니다. 왜냐하면 양쪽 끝에 중복 된 FK를 생성했기 때문입니다. 이제 정말 예쁘다. 감사. –

관련 문제