对基类的NHibernate查询不初始化派生类属性

时间:2013-05-17 07:49:19

标签: nhibernate

考虑以下类结构。

public abstract class Animal
{
    public string SomeData { get; set; }
    public IList<AnimalProperty> AnimalProperties { get; set; }
    public IList<OtherAnimalProperty> OtherAnimalProperties { get; set; }
}

public class Dog: Animal
{
    public DogProperty DogProperties { get; set; }
}

使用Dog类的以下映射

HasOne(x => x.DogProperties).ForeignKey("Id");

我现在有以下查询来检索Animal类型的对象列表。

list = session.QueryOver<Animal>()
       .WhereRestrictionOn(e => e.SomeData).IsIn(someList.ToArray())
       .Fetch(e => e.AnimalProperties).Default
       .Fetch(e => e.OtherAnimalProperties).Default
       .List();

我的列表现在包含Dog类型的对象(如预期的那样),但DogProperties属性为null。意思是,映射中定义的一对一类未初始化。 但是,NHibernate生成了一个很好的连接查询,它还从数据库中检索DogProperty数据。它只是不通过此查询创建类。

SELECT this_.Id as Id0_1_, this_.Name as Name0_1_, this_.DogName as DogName0_1_,
       this_.AnimalType as AnimalType0_1_, dogpropert2_.Id as Id1_0_, 
       dogpropert2_.MyProperty as MyProperty1_0_ 
FROM [Animal] this_ left outer join [DogProperties] dogpropert2_ 
       on this_.Id=dogpropert2_.Id

任何人都可以详细说明我在这里缺少的东西吗?或者这是NHibernate QueryOver的错误/默认行为?

0 个答案:

没有答案