none
Mapeamento OneToMany Nhibernate RRS feed

  • Pergunta

  • Olá,

    Em uma aplicação tem uma classe que eu preciso fazer um mapeamento OneToMany, essa classe pai ficara responsavel por realizar a persisntecia da classe filha. A minha duvida é, eu fiz o mapeamento da Bag na classe pai conforme abaixo:

                Bag(x => x.ItensMovimentacaoBanco, x =>
                {
                    x.Cascade(Cascade.Persist);
                    x.Key(y =>
                    {
                        y.Column("MovimentacaoBancoId");
                        y.NotNullable(true);
                    });
                    x.Lazy(CollectionLazy.Lazy);
                }, x => x.OneToMany());

    Agora eu também preciso fazer o mapeamento ManyToOne na classe filho?

    sexta-feira, 4 de setembro de 2015 19:57

Respostas

  • Eu tenho um exemplo no meu site dos relacionamentos: 

    Link: https://fulviocanducci.wordpress.com/2013/06/08/fluent-nhibernate-mapeamentos-classmap/

    Quanto se trabalha com mapear sempre se faz o retorno quando é 1 para N e N para 1.

    Eu também não entendi se o seu relacionamento é esse achei estranho a forma da pergunta, se puder colocar o diagrama dessas tabelas ficaria mais fácil opinar!

    Qualquer coisa dê uma olhada no exemplo logo abaixo:

    Cliente e Telefone aonde Cliente pode ter ou não vários telefones.

    Classes:

    Cliente

    sing System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace WAppFluentNhibernate.Db.Poco
    {
        public class Cliente
        {
            public Cliente() {
                this.Telefone = new List<Telefone>();
            }
    
            public virtual int Codigo { get; set; }
            public virtual String Nome { get; set; }
            public virtual DateTime? Data { get; set; }
            //Campo do tipo TimeSpan para Mysql Db o tipo é BigInt(20);
            public virtual TimeSpan Hora { get; set; }
            public virtual Decimal? Valor { get; set; }
            public virtual bool? Status { get; set; }
    
            public virtual IList<Telefone> Telefone { get; set; }
        }
    
    }

    Telefone

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace WAppFluentNhibernate.Db.Poco
    {
        public class Telefone
        {
            public Telefone() { }
            public virtual int Codigo { get; set; }
            public virtual Cliente Cliente { get; set; }
            public virtual String Ddd { get; set; }
            public virtual String Numero { get; set; }
        }
    }

    Mapeamento:

    using FluentNHibernate.Mapping;
    using NHibernate.Criterion;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    //http://www.leandroprado.com.br/2012/01/mapeamentos-com-fluent-nhibernate/
    
    namespace WAppFluentNhibernate.Db.Poco.Map
    {
        public class ClienteMap: ClassMap<Cliente>
        {
            public ClienteMap()
            {
                Table("cliente");
                Id(x => x.Codigo).GeneratedBy.Increment().Not.Nullable().Column("codigo");
                Map(x => x.Data).Nullable().Column("data");
                //Map(x => x.Hora).Column("hora").CustomType("timestamp"); // gravar funciona
                //Map(x => x.Hora).Column("hora").CustomType("TimeAsTimeSpan"); // carregar funciona
                //Hora configura como TimeSpan para banco SGBD MySql Type DB=Int64 ou BigInt(20)
                Map(x => x.Hora).Column("hora"); //
                Map(x => x.Nome).Not.Nullable().Column("nome").Length(255);
                Map(x => x.Status).Nullable().Column("status");
                Map(x => x.Valor).Nullable().Column("valor");
    
                HasMany(x => x.Telefone).Cascade.Merge().LazyLoad().KeyColumn("codigocliente");
            }
        }
    }
    using FluentNHibernate.Mapping;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace WAppFluentNhibernate.Db.Poco.Map
    {
        public class TelefoneMap: ClassMap<Telefone>
        {
            public TelefoneMap(){
                Table("telefone");
                Id(x => x.Codigo).Not.Nullable().UniqueKey("codigo").GeneratedBy.Increment().Column("codigo");
                Map(x => x.Ddd).Not.Nullable().Column("ddd").Length(3);
                Map(x => x.Numero).Not.Nullable().Column("numero").Length(14);
    
                References(x => x.Cliente).Cascade.Merge().LazyLoad().Column("codigocliente");
            }
        }
    }

    Seria uma forma tradicional!



    Fulvio Cezar Canducci Dias

    • Marcado como Resposta Edmar Munhoz segunda-feira, 28 de dezembro de 2015 11:31
    segunda-feira, 21 de setembro de 2015 15:28