2011-03-06 5 views
0

어쩌면 나는 현재 공유 기본 키가 같은 두 테이블을 가지고NHibernate 기본 키는 1-1 매핑입니까?

... 단지 잘못이 설계 한, 나는 행복보다 더 해요 그렇다면 다른 방법을 찾아 활과 그것을 약탈 :

사람 - ID (PK), 이름, CREATED_DATE, ...

person_details - person_id로 (PK), 연령, 신장, ...

지금 사람이 작성되는 및 사람 만 할 수 있습니다 하나의 세부 정보 집합. 그래서 처음에는 person_details를 매핑 할 때 PK가 할당 될 것이라고 생각했습니다. 이는 사람이 생성했기 때문입니다.

이제 데이터베이스에서이 데이터의 첫 번째 인스턴스를 만들 수있는 방법에 대해 혼란스러워합니다. PersonDetails 모델의 인스턴스가 들어있는 Person 모델을 만들 때와 마찬가지로이 시점에서 Id를 갖지 않습니다. , 그들이 만들어지지 않았기 때문에. PersonDetails 모델을 만들 때 Parent Person 모델에서 Id를 가져 오도록 PersonDetails 모델에 지시하려면 어떻게해야합니까?

나는 화를 낼 것인가? 또는 Person Id에서 삽입 할 때 PersonDetails Id를 추론하도록 Person 모델에서 수행해야하는 간단한 매핑이 있습니까? PersonDetails에 대한 Person_Id가 필요합니다. 초기 생성 후 변경이 이루어지면 Ajax에 의해 사람에게 외부 적으로 업데이트됩니다.

+0

이것에 대해 조금 생각한 후에는 일대일 매핑이 데이터베이스에서 일대일 매핑 일지라도 최선의 방법이 아닌 것으로 보입니다. 그래서 더 좋은 방법이 있습니다. 이 구조? 궁극적으로 아약스를 통해 개별적으로 세부 정보 (및 기타 일대일 스타일 관계)를 업데이트 할 수 있어야하므로 일부 사용자 만 저장하지 않고 개별적으로 저장할 수 있도록 관계가 필요합니다. 방법은 ... – Grofit

답변

1

테이블이 PK를 공유하는 경우 (개인적으로 생각되는 것으로 가정) 사람의 세부 사항이있는 one-to-one 또는 사람의 나이, 높이 등이있는 join이며 다른 테이블에 매핑되어 있습니다.

두 장을 모두 읽으십시오. 예제가 있습니다.

+0

안녕하세요, 이미 읽었습니다.하지만 문제는 Person 모델에 많은 정보가 포함되어 있고 PersonDetails 모델 (및 다른 모델)이있는 Person을 가지고 있다면 해당 모델에 다시 부모 개체에 대한 참조는 내가 현재 MVC를 사용하기 때문에 포스트 백에 많은 데이터를 전달할 것입니다. 그래서 PersonId를 Person 내에서 모델에 반대하게하고 싶었습니다. 나는 그들이 게으른 로딩 될 것이라고 알고있다. 그래서 메신저가 실제로 많은 데이터가 떠 다니는 것처럼 보이지는 않지만, 확실히 mvc 포스트 백이 null 데이터를 가질 것이라고 확신한다. ... 확인해야 할 것이다. – Grofit

+0

문제는 * HTTP 게시를위한 도메인 * 모델. 대신 * Presentation * 모델을 만듭니다. –

+0

원래 그 일을하려고하고 매퍼를 쓰려고했지만 NHibernate가 내가 원하는대로 행동 할 수 있다면 아무런 문제가 없다고 생각했다. – Grofit