Сопоставление сущности oneToMany с беглым nhibernate

Проблема кажется простой, однако у меня так много проблем, когда я пытаюсь отобразить эти объекты. Я просто не вижу, что я делаю не так. Ребята, вы можете мне помочь?

У меня есть классCliente:

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

И классMedidor

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

Я пытался сопоставить, как это

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");
}

Цель состоит в том, чтобы принести мой списокMedidor согласно базе данных. Так я и сделал:

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

И я получаю список всегда пустым. Даже имея данные в этих таблицах ... Я был бы признателен за любую помощь или предложение.

С уважением

РЕДАКТИРОВАТЬ

Моя база данных выглядит так:

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)
)

Учитывая sqlselect * from cliente where core_numero_medidor = '3569371':

CORE_ID CORE_NUMERO_MEDIDOR
123     3569371

и sqlselect * from MEDIDOR where numero_medidor = '3569371':

NUMERO_MEDIDOR MARCA_MEDIDOR
3569371        general_motors
3569371        kia
3569371        FIAT

Так что я предполагаю получить 3 элемента на моемIList<Medidor> Lista Medidores наCliente учебный класс..

РЕДАКТИРОВАТЬ

Я изменил на это:

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; }
}

И изменил картуClienteMap чтобы:

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

и теперь список получает ожидаемое количество записей, но все они такие же, как и первая. то есть:

ожидаемый

NUMERO_MEDIDOR MARCA_MEDIDOR
3569371        general_motors
3569371        kia
3569371        FIAT

Мой результат

NUMERO_MEDIDOR MARCA_MEDIDOR
3569371        general_motors
3569371        general_motors
3569371        general_motors

Какие-либо предложения? Я бы хотел поблагодарить @Radim Köhler за помощь.

ДРУГОЕ РЕДАКТИРОВАНИЕ

Я нашел решение!

Я пытался отобразить неуникальный столбец как первичный ключ ... Я просто изменил столбец на настоящий первичный ключ и работал!

Итак, вот решение

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
    }
}

И вот мой запрос:

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

Я действительно хотел бы поблагодарить Радима Келера за помощь. Его терпение, внимание и готовность помочь решить проблему оставляет мне недостаток благодарности ... Я могу только пожелать ему всего наилучшего в жизни.

И я очень надеюсь, что эта тема может помочь людям с той же проблемой.

С уважением.

Ответы на вопрос(1)

Ваш ответ на вопрос