TransWikia.com

Mapeamento de entidade oneToMany com Fluent NHibernate

Stack Overflow em Português Asked by Marllon Nasser on November 20, 2021

Senhores, meu problema aparentemente é simples, eu devo estar fazendo ou esquecendo alguma coisa e simplesmente não consigo enxergar o erro. Podem me ajudar?

Tenho a classe Cliente:

public class Cliente {

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

E a classe Medidor

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

Tentei mapear da seguinte forma:

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

Meu objetivo é trazer o objeto Cliente com a lista de Medidores preenchida.
Eu faço simplesmente um:

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

E a lista de medidores vem vazia, mesmo tendo registros no banco.
Ficarei grato por qualquer tipo de ajuda/sugestão.

One Answer

Consegui resolver...fica ai a solução caso alguém passe pelo mesmo problema.

Eu quis fazer uma relação entre tabelas sem que elas fossem indexadas por suas PKs e FKs..

Segue:

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.ListaMedidores)
            .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");
        [...] //outras propriedades
    }
}

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

Dessa forma, eu tenho o mesmo resultado esperado que o esperado no banco:

NUMERO_MEDIDOR MARCA_MEDIDOR
3569371        general_motors
3569371        kia
3569371        FIAT

Um obrigado em especial para o @Radim Köhler, que me ajudou bastante. Boa sorte a todos!

Answered by Marllon Nasser on November 20, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP