2009-10-27 2 views
4

기본 클래스에 대한 NHibernate 매핑이 있습니다.NHibernate SaveOrUpdate, 오류 :에 대한 persister

class A 
{ 
} 

class B : A 
{ 
} 

public save(A a) 
{ 
session.SaveOrUpdate(a); 
} 

오류가 있습니다. B가 올바른 기본 유형 A와 함께 전달되었지만 여전히 오류가 표시되는 것을 볼 수 있습니다. B 타입을위한 persister

NHibernate는 이와 같은 상속을 지원합니까 ... 어떻게해야합니까?

답변

9

업데이트 : 그에 결정적인 원인을 찾기 위해 실패하더라도 다시 대답

은 분명히, 실제 클래스 중요하다. NHibernate가 리플렉션 (reflection)을 사용하여 기본 유형을 찾는다는 것을 고려할 때 이것은 의미가 있습니다. 또한 맵핑이로드 될 때 유형을 장식하므로 기본적으로 다른 유형이됩니다 (디버깅 중에 마우스를 가져 가면 볼 수 있습니다).

이 원칙은 기본적으로 상속 downcast-mapping을 방지합니다. 파생 된 유형이 매핑되지 않아 매핑되지 않으므로 알 수 없습니다. 상속을 사용해야하는 경우, 당신은 몇 가지 옵션이 있습니다

  1. 이 클래스는 하나 개의 유형 복사하기, 캐스트가 충분하지 않습니다 (다른 그것을 변환기를 추가 파생 클래스
  2. 에 대한 매핑을 확인)
  3. 사용 ICloneable

를 기본 객체를 변경하지 않습니다 이러한 모든 방법은 다소 복잡하다. 디자인에서 상속 대신 허용되는 경우 부분 클래스 또는 확장 메서드를 사용합니다. 후자는 내 자신의 프로젝트에서 찾은 것인데 분명히 이전에이 문제에 부딪혀 확장 메서드를 사용하는 습관을 가졌습니다.

+0

이것은 내가 가지고있는 것과 같습니다 .... 나는 B를 A로 캐스팅했으나 여전히 같은 오류가 나타납니다. B에 대한 잔류 물이 없습니다. – John

+0

답을 다시 썼습니다. 너무 빠릅니다. – Abel

+1

이 답변은 1.5 년 후에도 많은 도움이되었습니다 :) – SadullahCeran

관련 문제