2011-03-22 26 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"); 
    } 
} 

的問題是:如果人有一隻貓或Dog中的Person.Pet的類型是'Pet {PetBroxyBlaBlaBla}'。所以我不能投入Person.Pet來鍵入Cat(Person.Pet as Cat == null)。

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

但是,如果我得到一個人面前得到DB這個寵物的類型是有效的:

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

是否有辦法告訴NHibernate的一個有效的類型來初始化這個屬性?

回答

1

嘗試禁用延遲加載。它可能是由this