Search code examples
c#fluent-nhibernate

Working with Embeddable in FluentNHibernate?


I'm looking for any how to or documentation about use of Embeddable with FluentNHibernate exactly with in the Hibernate. Does has any way to works with Embeddable in FluentNHibernate, if not has what's the best way to simulate this ?


Solution

  • Finally I found some solution. It's very simple like Embeddable of JPA/Hibernate.

    Found here: https://github.com/jagregory/fluent-nhibernate/wiki/Fluent-mapping#components

    Then I did.

    public class Cliente {
    
            public virtual long id                          { set; get; }
            public virtual long codigo                      { set; get; }
            public virtual String nome                      { set; get; }
            public virtual String sexo                      { set; get; }
            public virtual String cpf                       { set; get; }
            public virtual String rg                        { set; get; }
            public virtual DateTime dtNascimento            { set; get; }
            public virtual Endereco endereco                { set; get; } //Embeddable
    
            public Cliente() { }
        }
    
    
    
    public class Endereco {
    
            public  String endereco;
            public  String numero;
            public  String bairro;
            public  String complemento;
            public  String cidade;
            public  String cep;
            public  EstadosBrasil uf;
    
            public Endereco() {            
            }
        }
    

    Mapping

    public class ClienteMap : ClassMap<Cliente> {
            public ClienteMap() {
                Table("CLIENTE");
                Id(c => c.id).GeneratedBy.Native();
                Map(c => c.codigo);
                Map(c => c.nome);
                Map(c => c.sexo).Length(2);
                Map(c => c.cpf);
                Map(c => c.rg);
                Map(c => c.dtNascimento).CustomType<DateTime>();
                //embeddable
                Component(c => c.endereco, e => {
                                                e.Map(c => c.endereco);
                                                e.Map(c => c.numero).CustomType<int>();
                                                e.Map(c => c.bairro);
                                                e.Map(c => c.complemento);
                                                e.Map(c => c.cidade);
                                                e.Map(c => c.cep);
                                                e.Map(c => c.uf).CustomType<GenericEnumMapper<EstadosBrasil>>();
                                                });
    
            }
        }