考虑遵循类结构。
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 的错误/默认行为?