1

我正在尝试使用 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; }
}

人才查询能够计算出如何获得创作者

但是学分没有,我可以看到正在生成另一个 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();

我如何让天赋获得它的学分?

4

1 回答 1

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();
于 2013-02-06T12:09:29.647 回答