Carregamento ansioso usando NHibernate / Nhibernate & Automapping fluentes

Eu tenho um requisito para carregar um objeto complexo chamado... bem, não é tão complexo ... parece o seguinte: -

A  tem uma referência aTipo de entidade que tem umum para muitos comPropriedade que por sua vez tem umum para muitos comPorpertyListValue

public class Node
{
    public virtual int Id
    {
        get;
        set;
    }

    public virtual string Name
    {
        get;
        set;
    }

    public virtual EntityType Etype
    {
        get;
        set;
    }

}


public class EntityType
{
    public virtual int Id
    {
        get;
        set;
    }

    public virtual string Name
    {
        get;
        set;
    }

    public virtual IList<Property> Properties
    {
        get;
        protected set;
    }

    public EntityType()
    {
        Properties = new List<Property>();
    }
}

public class Property
{
    public virtual int Id
    {
        get;
        set;
    }

    public virtual string Name
    {
        get;
        set;
    }        

    public virtual EntityType EntityType
    {
        get;
        set;
    }

    public virtual IList<PropertyListValue> ListValues
    {
        get;
        protected set;
    }

    public virtual string DefaultValue
    {
        get;
        set;
    }

    public Property()
    {
        ListValues = new List<PropertyListValue>();
    }
}


public class PropertyListValue
{
    public virtual int Id
    {
        get;
        set;
    }

    public virtual Property Property
    {
        get;
        set;
    }

    public virtual string Value
    {
        get;
        set;
    }

    protected PropertyListValue()
    {
    }
}

O que eu estou tentando fazer é carregar o objeto Node com todos os objetos filhos de uma só vez. Sem carga preguiçosa. O motivo é que eu tenho milhares de objetos Node no banco de dados e preciso enviá-los pela conexão usando o Serviço WCF. Eu corri para o problema de classes SQL N + 1. Estou usando o Fluent Nhibernate com Automapping e o NHibernate Profiler me sugeriu usarFetchMode.Eager para carregar todos os objetos de uma só vez. Estou usando o seguinte qyuery

     Session.CreateCriteria(typeof (Node))
            .SetFetchMode( "Etype", FetchMode.Join )
            .SetFetchMode( "Etype.Properties", FetchMode.Join )
            .SetFetchMode( "Etype.Properties.ListValues", FetchMode.Join )

OU usando o NHibernate LINQ

        Session.Linq<NodeType>()
         .Expand( "Etype")
         .Expand( "Etype.Properties" )
         .Expand( "Etype.Properties.ListValues" )

Quando executo qualquer uma das consultas acima, elas geram uma mesma consulta única com todas as associações externas à esquerda, e é disso que preciso. No entanto, por algum motivo, o retorno IList da consulta não está sendo carregado na propriedade nos objetos. Na verdade, a contagem de nós retornados é igual ao número de linhas da consulta, portanto os objetos Nodes são repetidos. Além disso, as propriedades em cada Node são repetidas, assim como os Listvalues.

Então, eu gostaria de saber como modificar a consulta acima para retornar todos os nós exclusivos com as propriedades e os valores de lista dentro deles.

Obrigado Nabeel

questionAnswers(4)

yourAnswerToTheQuestion