2013-07-02 1 views
0

나는 하나의 테이블에서 여러 개의 다른 파생 클래스로 레코드를 매핑하는 데 nhibernate를 사용하는 시나리오가 있습니다.Nhibernate 하위 클래스가없는 핸들 사례

public class BaseClass { } 

public class DerivedClass0 : BaseClass { } 
public class DerivedClass1 : BaseClass { } 
public class DerivedClass2 : BaseClass { } 

나는 다음 NHibernate에의 DiscriminateSubClassesOnColumn() 메소드를 사용하여 매핑 할 때, 이러한 클래스가 파생 클래스가 아닌 BaseClass로 캐스팅되도록

<subclass name="DerivedClass0" extends="BaseClass" discriminator-value="discriminator0" /> 
<subclass name="DerivedClass1" extends="BaseClass" discriminator-value="discriminator1" /> 
<subclass name="DerivedClass2" extends="BaseClass" discriminator-value="discriminator2" /> 

를 포함하도록 설정을 변경합니다.

그러나 내 데이터베이스에는 해당 하위 클래스가없는 식별자가있는 일부 레코드가 있습니다. 슬로우 해당 서브 클래스가없는 모든 기록이 BaseClass로가 아닌 오류로 캐스팅되도록,

"Object with id: 'xxx' was not of the specified subclass..." 

나는이 문제를 해결할 수있는 방법이 있나요 :이 경우, nHibernate 수에서 오류가 발생합니다?

가능한 한 위의 내용을 단순화했습니다. 그러나 XML이 동적으로 편집되므로 주목할 가치가 있습니다. 이는 내가 유창한 nhibernate [DiscriminateSubClassesOnColumn()]과 XML을 동시에 참조하는 이유입니다.

  • 내가 하나
  • 이없는 레코드에 대한 하위 클래스를 만들 수 없습니다
  • 유효하지 않은 레코드를 제거하기 위해 데이터를 수정할 수 없습니다

    다음 일이 (도움이되는) 옵션이 아니다

nHibernate가 discriminator를 매핑하려고 시도하고 그 중 하나가 존재하지 않는 경우를 처리해야합니다.

답변

0

해결 방법은 Fluent NHibernate 매핑에서 "AlwaysSelectWithValue()"메서드를 사용하는 것입니다.

DiscriminateSubClassesOnColumn("discriminator").AlwaysSelectWithValue(); 

이렇게하면 NHIbernate는 해당 하위 클래스가있는 데이터베이스의 결과 만 가져옵니다.