2010-11-19 4 views
0

추상 기본 클래스 매핑에서 구체적인 유니온 서브 클래스로 many-to-one 관계를 매핑하는 데 문제가 있습니다. 예 :추상 기본 클래스에서 유니온 서브 클래스로 NHibernate many-to-one 관계 매핑

public abstract class Entity 
{ 
    public virtual Guid ID {get; set;} 
    public virtual string Name {get;set;} 
    public virtual User OwnerUser {get; set;} 
} 

public class User : Entity 
{ 
    public virtual string UserName {get; set;} 
} 

여기서 볼 수 있듯이 모든 데이터베이스 개체에 기본 추상 클래스가 있습니다. 나는 이러한 클래스를 추상 매핑 클래스 인 Entity 클래스와 함께 그리고 사용자를 공용 서브 클래스로 매핑하려고합니다. 구성 객체를 만들 때 오류가 발생하지 않고 스키마가 올바르게 내보내기됩니다. 그러나 OwnerUser 필드는 모든 구체적인 클래스에 대해 데이터베이스에 표시되지 않습니다. 다음은 매핑의 예입니다.

<class entity-name="Entity" name="Entity" abstract="true"> 
    <id name="ID" type="guid"> 
     <generator class="guid.comb"/> 
    </id> 
    <property name="Name" /> 
    <many-to-one name="OwnerUser" column="ID" entity-name="User" /> 
</class> 

<union-subclass name="User" entity-name="User" extends="Entity"> 
    <property name="UserName" /> 
</union-subclass> 

또한 데이터베이스 백엔드로 Oracle XE 인스턴스를 사용하고 있습니다. 이것이 질문에 올바로 대답하기에 충분한 정보가 아니라면 알려주십시오. 제가 할 수있는 것을 추가 할 것입니다.

최악의 시나리오 모든 구체적인 개체에 명시 적으로 다 대일 관계를 명시 적으로 추가하겠습니다. 그러나 이것은 가장 우아한 해결책은 아니며 제안한 것이 효과가 있다고 생각합니다. 여러 가지 인터넷을 지원하는 튜브에서 이에 대한 구체적인 예를 찾을 수 없었습니다. 문서에서 무언가를 놓칠 수는 있었지만 유효하지 않은 유스 케이스라는 것을 명시하지 않았습니다. 처음이 아니었을 것입니다. -/

이 질문에 대한 답변은 크게 받고 있습니다. 시간 내 주셔서 감사합니다.

답변

0

와우, 그냥 ... 와우.

이 게시물을 삭제하려고 시도하는 대신, 특정 유스 케이스와 관련하여 질문을 찾을 수 없으므로이 게시물을 삭제하려고 시도하는 대신 하루를 찾기 위해 다른 낮은 nhibernate 멍청한 놈에게 맡길 것입니다.

실제로 문제없이이 작업을 수행 할 수 있습니다. 내 문제는 다 대 일 매핑 요소에서 열 특성에 대한 ID를 지정한다는 것이 었습니다. 어떤 이상한 이유 때문에 필자는 외래 키가 참조하는 열이라고 생각했습니다. (실수가 아니라면 실제로는 ref-ref입니다.) 이 속성은 실제로 테이블에 참조를 보유하는 열 이름을 지정합니다 (오!). 놀랍게도, NHibernate는 여러 매핑 요소를 경고없이 같은 열 이름에 행복하게 매핑 할 것이다. 나는 그것들을 비난하려고 노력하지 않고있다. 아마도 그것의 유스 케이스는 다형 파생 클래스에서 어떤 타입의 오버라이드 (override)를 허용하고있을 것이다.

어쨌든, 이것은 유효한 유스 케이스이며, 열 속성을 참조 테이블의 컬럼 이름으로 변경하면 정상적으로 작동합니다. 아마 나는 이번 주에 매일 밤 조금 너무 오랫동안 비트와 바이트를보고있었습니다 ... 한숨.

이 게시물을 확인하는 데 시간을내어 주신 모든 분들께 감사드립니다.

관련 문제