NHibernate延迟加载似乎不适用于我的域名?

时间:2010-11-24 06:55:50

标签: c# .net nhibernate

我是NHibernate的新手,但已经设法让我的最新项目运行良好。但是现在我已经达到了不可避免的性能问题,我需要超越抽象来解决它。

我已经创建了一个nunit测试来隔离需要很长时间的方法。但首先快速浏览一下我的域模型可能是一个好主意:

我有一个'PmqccForm',它是一个具有'Project'对象的对象,它包含Name,Number等,它还有一个'Questions'对象,该对象本身包含各种不同的属性'问题'对象。有一个JobVelocityQuestion对象本身有一个答案和一些其他属性,以及一大堆类似的Question对象。 这就是我所说的PmqccForm有一个Questions对象 alt text

这是该模型的问题部分: Question DOmain Model

关键是我希望能够打字 form.Questions.JobVelocityQuestion

因为每个PmqccForm总是有1个JobVelocityQuestion,所有其他问题都是一样的。这些是Questions对象的C#属性,它只是它们的保留位置。

现在,引起我问题的方法是:

        public IEnumerable<PmqccForm> GetPmqccFormsByUser(StaffMember staffMember)
    {
        ISession session = NHibernateSessionManager.Instance.GetSession();

        ICriteria criteria = session.CreateCriteria(typeof(PmqccForm));
        criteria.CreateAlias("Project", "Project");
        criteria.Add(Expression.Eq("Project.ProjectLeader", staffMember));
        criteria.Add(Expression.Eq("Project.IsArchived", false));
        return criteria.List<PmqccForm>();
    }

从Nunit测试我的控制台看一下刚刚运行这个方法,看到有近2000个sql查询正在被处理! http://rodhowarth.com/otherstorage/queries.txt是控制台日志。

事情是,在这个阶段我只想要表单对象,实际问题可以在需要知道的基础上访问。我认为NHibernate本来可以做到这一点?

这是我的映射文件: http://rodhowarth.com/otherstorage/hibernatemapping.txt

任何人都可以暗示我缺少什么吗?或者一种优化我正在做的与NHibernate相关的方法?

如果我将问题作为集合,然后使属性循环遍历此集合并返回正确的集合,该怎么办?从nhibernates的角度来看,这会更好地优化吗?

1 个答案:

答案 0 :(得分:0)

尝试将fetch =“subselect”添加到Questions组件的映射文件中,看看这是否解决了该表的多个选择问题 - 您现在应该看到一个第二个选择而不是数百个单独的查询,例如

<component name="Questions" insert="true" update="true" class="PmqccDomain.DomainObjects.Questions" fetch="subselect">

有关详细信息,请参阅参考资料 - Improving performance