2010-06-23 3 views
1

개체 A에는 일대 다 연관이 있습니다. 많은 개체 B입니다.NHibernate가 일시적인 인스턴스를 식별 할 수 있도록하면서 할당 된 자연 키 식별자를 사용할 수 있습니까?

TableB - 데이터베이스를 볼 때 항상 읽을 수있는 고유 한 문자열 A.Name을보고 싶습니다. 이름을보기 위해 대리 정수 식별자를 항상 조인하거나 subselect해야합니다.

나는 A에 대한 식별자로 Name를 매핑 할 수 있지만, NHibernate에이 A의 인스턴스가 일시적 또는 영구적인지 여부를 식별 할 수 있기 때문에이 추가 SELECT 쿼리 많이 발생합니다.

자연 키로 고유 지정 대리 키를 결합하여 복합 키를 사용할 수 있다고 상상합니다. 이것은 차선책 인 것처럼 보이지만 몇 가지 의견을 듣고 싶습니다.

NHibernate가 일시적인 인스턴스를 식별 할 수있게하면서 단일 열 자연 키를 사용하는 전략을 찾고 있습니다.

  • 가능합니까?
  • 매핑 (Fluent 또는 Hbm)이란 무엇입니까? 한편

,이 모든 끔찍한 생각 난 그냥 부속 선택과 데이터베이스 뷰에 의존하는 경우는, 설명해주십시오.

감사합니다.

답변

1

끔찍한 생각이며 "데이터베이스를 살펴 봐야"하는 경우에 해당 조인을 수행하는보기를 만들어야합니다. 이름 테이블 A.

의 기본 키가 아니기 때문에

그것은 끔찍한 생각하지만 난 당신이 A.Name에 고유 제한 조건을두고 식별자로하게되면, 당신이 그것을 할 수 있다고 생각합니다. NHibernate에 기본값이 널 (null) 또는 저장되지 않은 값에 대해 빈 문자열하지만 당신은 String.Empty로로 이름을 초기화해야합니다 A의 생성자보다 String.Empty로를 사용하는 경우

Id(x => x.Name).GeneratedBy.Assigned().UnsavedValue(string.Empty); // or null 

사용하여 지정할 수 있습니다 할 수 있는지 확실하지 않습니다. 나는 A로부터 대리 식별자를 제거 할 것이고 테이블 자체는 아무런 목적도 수행하지 않기 때문에 테이블 자체를 제거 할 것이다.

+0

끔찍한 아이디어 - 괜찮습니다. 왜? – Jay

+0

짧은 답변을 드려 죄송합니다. –

+0

업데이트 해 주셔서 감사합니다. 'UnsavedValue()'를 사용할 때의 문제점은 내가 그것을 유지할 수 없다는 것입니다. 이름을 할당하자마자 Hibernate는 이미 그것을 저장 한 것으로 간주합니다. – Jay

관련 문제