我正在使用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进行热切联接的最佳方法是什么?
答案 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/