Mapeando a entidade oneToMany com nhibernate fluente

O problema parece ser simples, no entanto, estou tendo muitos problemas para tentar mapear essas entidades. Eu simplesmente não consigo ver o que estou fazendo de errado. Vocês podem me ajudar?

Eu tenho aulaCliente:

public class Cliente
{    
    public Cliente () { }
    public virtual int ClienteId { get; set; }  
    public IList<Medidor> ListaMedidores { get; set; }   
    public virtual string NumeroMedidor { get; set; }       
}

E classeMedidor

public class Medidor
{
    public Medidor() { }
    public virtual string NumeroMedidor { get; set; }
    public virtual string MarcaMedidor { get; set; }
    public virtual Cliente Cliente { get; set; }
}

Eu tentei mapear assim

public ClienteMap()
{
    Map(x => x.NumeroMedidor).Column("CORE_NUMERO_MEDIDOR");
    HasMany(x => x.ListaMedidores)
        .KeyColumn("NUMERO_MEDIDOR").Inverse().Cascade.All();
}


public MedidorMap()
{
    Table("medidor");
    LazyLoad();

    Id(x => x.NumeroMedidor).Column("NUMERO_MEDIDOR");
    Map(x => x.TipoMedidor).Column("TIPO_MEDIDOR");
    References(x => x.Cliente).Column("CORE_NUMERO_MEDIDOR");
}

O objetivo é trazer minha lista deMedidor de acordo com o banco de dados. Então eu fiz:

Session.Query<Cliente>().Fetch(x => x.ListaMedidores).ToList();

E eu estou ficando a lista sempre vazia. Mesmo tendo dados nessas tabelas ... eu apreciaria qualquer tipo de ajuda ou sugestão.

Saudações

EDITAR

Meu banco de dados é assim:

CREATE TABLE CLIENTE
(
  CORE_ID                      NUMBER           NOT NULL,
  CORE_NUMERO_MEDIDOR          VARCHAR2(50 BYTE)
)

CREATE TABLE MEDIDOR
(
  NUMERO_MEDIDOR  VARCHAR2(50 BYTE),
  MARCA_MEDIDOR   VARCHAR2(50 BYTE)
)

Dado o sqlselect * from cliente where core_numero_medidor = '3569371':

CORE_ID CORE_NUMERO_MEDIDOR
123     3569371

e o sqlselect * from MEDIDOR where numero_medidor = '3569371':

NUMERO_MEDIDOR MARCA_MEDIDOR
3569371        general_motors
3569371        kia
3569371        FIAT

Então, eu devo obter 3 elementos no meuIList<Medidor> Lista Medidores emCliente classe..

EDITAR

Eu mudei para isso:

public class Cliente
{    
    public Cliente () { }
    public virtual int ClienteId { get; set; }  
    public IList<Medidor> ListaMedidores { get; set; }   
    public virtual string NumeroMedidor { get; set; }       
}
public class Medidor
{
    public Medidor() { }
    public virtual string NumeroMedidor { get; set; }
    public virtual string MarcaMedidor { get; set; }
}

E mudou o mapa deClienteMap para:

Map(x => x.NumeroMedidor).Column("NUMERO_MEDIDOR");    
HasMany(x => x.ListaMedid)
            .KeyColumns.Add("NUMERO_MEDIDOR")
            .Table("MEDID")
            .PropertyRef("CoreNumeroCliente")
            .Cascade.All();

e agora a lista obtém o número esperado de registros, mas todos são iguais ao primeiro. ou seja:

Esperado

NUMERO_MEDIDOR MARCA_MEDIDOR
3569371        general_motors
3569371        kia
3569371        FIAT

Meu resultado

NUMERO_MEDIDOR MARCA_MEDIDOR
3569371        general_motors
3569371        general_motors
3569371        general_motors

Alguma sugestão? Gostaria de agradecer a @Radim Köhler até agora pela ajuda.

OUTRA EDIÇÃO

Eu encontrei a solução!

Eu estava tentando mapear uma coluna não exclusiva como chave primária ... Acabei de alterar a coluna para uma chave primária real e funcionou!

Então agora aqui está a solução

public class Cliente
{    
    public Cliente () { }
    public virtual int ClienteId { get; set; }  
    public IList<Medidor> ListaMedidores { get; set; }   
    public virtual string NumeroMedidor { get; set; }       
}
public class Medidor
{
    public Medidor() { }
    public virtual string NumeroMedidor { get; set; }
    public virtual string MarcaMedidor { get; set; }
}

public class ClienteMap : ClassMap<Cliente>
{
    public ClienteMap()
    {
        Map(x => x.NumeroMedidor).Column("NUMERO_MEDIDOR");    
        HasMany(x => x.ListaMedid)
            .KeyColumns.Add("NUMERO_MEDIDOR")
            .Table("MEDID")
            .PropertyRef("CoreNumeroCliente")
            .Cascade.All();
    }
}

public class MedidorMap : ClassMap<Medidor>
{
    public MedidorMap()
    {
        LazyLoad();

        Id(x => x.NumeroMedidor).Column("NUMERO_MEDIDOR");
        Map(x => x.MarcaMedidor).Column("MARCA_MEDIDOR");
        [...] //Other properties
    }
}

E aqui está a minha consulta:

Session.Query<CorteReligacao>()
                .Fetch(x => x.ListaMedid)

Eu realmente gostaria de agradecer a Radim Köhler pela ajuda. Sua paciência, atenção e vontade de ajudar a resolver o problema me deixam sem agradecimento. Só posso lhe desejar o melhor da vida.

E realmente espero que esse tópico possa ajudar pessoas com o mesmo problema.

Saudações.

questionAnswers(2)

yourAnswerToTheQuestion