我正在尝试使用3个查询和期货来提取完整的对象图,以批量处理3个调用。
这是我的对象图的缩减版。
public class Talent
{
public virtual int Id { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual string Slug { get; set; }
public virtual IList<Credit> Credits { get; set; }
public virtual IList<Show> Creations { get; set; }
}
Talent查询能够找出如何获取创作者
但是学分没有,我可以看到生成另一个SQL查询来再次获取这些数据。 以下是查询。
//Selectes the root node
var talentQuery = session.QueryOver<Filmslave.Domain.Models.Talent>()
.Where(t => t.Slug == slug)
.Take(1)
.Future();
//Fills Talent.Creations
var creationsQuery = session.QueryOver<Filmslave.Domain.Models.Creator>()
.Fetch(c => c.Shows).Eager
.JoinQueryOver(c => c.Talent).Where(t => t.Slug == slug)
.Future();
//Fills Talent.Credits
var creditsQuery = session.QueryOver<Filmslave.Domain.Models.Credit>()
.Fetch(c => c.Role).Eager
.Fetch(c => c.Episode).Eager
.JoinQueryOver(c => c.Talent).Where(t => t.Slug == slug)
.Future();
talent = talentQuery.FirstOrDefault();
我如何让人才获得它的学分?
答案 0 :(得分:6)
它应该像这样工作,但我也发现使用逆的急切加载关系是有问题的。如果您反转查询它应该工作:
var creditsQuery = session.QueryOver<Filmslave.Domain.Models.Talent>()
.Where(t => t.Slug == slug)
.Fetch(t => t.Credits).Eager
.Fetch(t => t.Credits[0].Role).Eager
.Fetch(t => t.Credits[0].Episode).Eager
.Future();