2011-03-22 2 views
0

가정하자 나는 수업이 있습니다유창 NHibernate에 일대일 기본 클래스와

class Person 
{ 
String FirstName; 
String LastName; 
Pet Pet; 
} 

class Pet 
{ 
String Name; 
Person Owner; 
} 

class Cat : Pet 
{ 
Int32 MousesCaught; 
} 

class Dog : Pet 
{ 
Int32 CatsCaught; 
} 

그리고 매핑 :

public class PetMap : IAutoMappingOverride<Pet> 
{ 
    public void Override(AutoMapping<Pet> mapping) 
    { 
     mapping.HasOne(x => x.Owner).PropertyRef(x => x.Pet).Constrained().Cascade.All(); 
     mapping.JoinedSubClass<Cat>("PetId"); 
     mapping.JoinedSubClass<Dog>("PetId"); 
    } 
} 

문제는 다음과 같습니다 고양이 나에 사람이있는 경우를 DB에있는 개는 Person.Pet의 유형이 'Pet {PetBroxyBlaBlaBla}'입니다. 그래서 Person을 캐스팅 할 수 없습니다. Cat (Person.Pet as Cat == null)을 입력하십시오. 나는 사람을 얻기 전에 DB에서이 애완 동물을 가질 경우

var person = this.Session.Get<Person>(personId); 
    // person.Pet as Cat == null 

는 그러나 유형은 유효하다 :

var a = new this.Session.Get<Pet>(petId); 
    var person = this.Session.Get<Person>(personId); 
    // person.Pet as Cat != null 

는 유효한 유형이 속성을 초기화하기 위해서 NHibernate에 말할 수있는 방법이있는가요?

답변

1

지연로드를 비활성화하십시오. 이로 인해 발생할 수 있습니다. this