在NHibernate中进行热切联接的最佳方法是什么?

时间:2010-12-16 00:10:46

标签: c# nhibernate

我正在使用NHibernate并开始使用NHibernate探查器,并意识到我正在运行许多我不需要的SQL查询。一个主要的优化是让我能够预先加入,以避免选择N + 1问题。

我试图找出使用NHibernate进行热切联接的最佳方法:

IList projects = session.CreateQuery(
      "from Project p left join fetch p.Sponsors left join fetch p.Desks")
      .List();

但这不断出现错误:

  

QueryException:无法解析Domain.Project赞助商的属性

使用NHibernate进行热切联接的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

该异常意味着Project.Sponsors未映射。

无论如何,有一种更好的方式来收集收集的热情,特别是在检索多个时:http://ayende.com/Blog/archive/2010/01/16/eagerly-loading-entity-associations-efficiently-with-nhibernate.aspx

答案 1 :(得分:2)

确保您的Project对象正确映射了赞助商。

应该(希望)看起来像

 [BelongsTo(Column = "Sponsor_ID")]
    public Sponsor sponsors { get; set; }

同样也应该使用书桌。

可能希望查看http://nmg.codeplex.com/以获得具有大量选项的良好映射生成器。

还有Afo Castle Generator没有那么多选项,可能有一些轻微的怪癖但仍然有效。 (这是我最初使用的那个)http://www.agilityfororms.com/Home/Products/AfoCastleActiveRecordModelCodeGenerator/

此外,如果您正在寻找急切的加载,您可以随时尝试使用标准。

可以在这里找到一些关于Nhibernate的好教程:http://www.summerofnhibernate.com/