【发布时间】:2017-12-13 07:25:04
【问题描述】:
我知道延迟加载 'on' 是 NHibernate 中的默认设置。我关闭了延迟加载,使用按代码映射,用于实体(学生)和实体中包含的集合(评论)。然而,包括使用 SQL-Profiler 的测试表明,当通过 Session.Get() 访问实体时,它不会从数据库加载集合。我只看到一个“选择”来从数据库中获取实体(学生)。没有“加入”或“选择”到集合表(评论)。我错过了什么吗?我正在使用 NH 版本 5。
映射:
using NHibernate.Mapping.ByCode.Conformist;
using NHibernate.Mapping.ByCode;
namespace Infrastructure.Repository.NH.Tests
{
public class StudentSubclassMapping: JoinedSubclassMapping<Student>
{
public StudentSubclassMapping()
{
Lazy(false);
Property(student => student.EnrollmentDate);
List(student => student.Comments,
listMapper =>
{ listMapper.Lazy(CollectionLazy.NoLazy);},
relationMapper =>
relationMapper.Element());
}
}
}
域:
public class Student : Contact
{
public virtual DateTime? EnrollmentDate { get; set; }
public virtual IList<string> Comments { get; set; }
}
测试:
public void Get_TestToCheckIfLazyLoadingIsTurnedOff()
{
using (var session = SessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var student = session.Get<Student>(2);
transaction.Commit();
}
}
}
【问题讨论】:
标签: nhibernate lazy-loading nhibernate-mapping-by-code