domingo, 30 de abril de 2017

C# - Mapeamento


 Sobre SubClassMap

No post anterior criamos as classes.

No exemplo abaixo, estou utilizando Not.Nullable(), isso quer dizer que, campos a serem criados nas respectivas tabelas serão not null.
Você deverá validar os campos conforme suas necessidades.


 public class PessoaMap : ClassMap<Pessoa>
    {
        PessoaMap()
        {
            Id(c => c.Id).GeneratedBy.Native();
            Map(c => c.Nome).Length(60).Not.Nullable();
        }
    }


    public class PessoaFisicaMap : SubclassMap<PessoaFisica>
    {
        PessoaFisicaMap()
        {
            Map(c => c.Cpf).Length(14).Not.Nullable();
            Map(c => c.DataNascimento).Not.Nullable();
        }
    }



 public class PessoaJuridicaMap : SubclassMap<PessoaJuridica>
    {
        PessoaJuridicaMap()
        {
            Map(c => c.Cnpj).Length(14).Not.Nullable();
            Map(c => c.DataAbertura).Not.Nullable();
        }
    }


 Na imagem abaixo é possível observar como as tabelas foram criadas no banco de dados.

Microsoft SQL Server Management Studio - 2016

C# - Classes

Sobre Fluent NHibernate

Este artigo é básico e contem breve descrição e exemplo de mapeamento entre classes.

Assuntos relacionados
- Fluent NHibernate
- Classes
- SubClasses
- Mapeamento

Criando as classes Pessoa, Pessoa FísicaPessoa Jurídica.

 Para que fique de forma bem estrutura, faz-se necessário que cada classe contenha somente os atributos inerentes a ela.

Observe que nossa classe Pessoa é abstrata.

 public abstract class Pessoa
    {
        public virtual int Id { get; set; }
         public virtual string Nome { get; set; }
    }


A classe PessoaFisica herdará de Pessoa

  public  class PessoaFisica : Pessoa
    {
        public virtual string Cpf { get; set; }
        public virtual DateTime DataNascimento { get; set; }
    }


A classe PessoaJuridica herdará de Pessoa

  public  class PessoaJuridica : Pessoa
    {
        public virtual string Cnpj { get; set; }
        public virtual DateTime DataAbertura { get; set; }
    }


No próximo post iremos fazer o mapeamento.
 

C# - Fluent NHibernate

Fluent NHibernate
 é um poderoso framework para auxilia no processo de  mapeamentos das suas entidades com o banco de dados.

Com NHibernate é possível realizar mapeamento utilizando arquivos  xml (.hbm) para realizar o mapeamento, mas tem desvantagem, esse processo é muito trabalho, para contornar todo esse processo trabalhoso, iremos utilizar o Fluent NHibernate, com ele podemos realizar esse mapeamento pelo próprio código da classe sem precisar de usar os arquivos HBM.

HBM.XML

O arquivo hbm.xml é responsável pelo mapeamento, para que isso ocorra é necessário que sejam informados alguns itens;
* -  Nome da tabela,
* - Tamanho e Tipo de dados dos campos
* - E outras informações.

Exemplo.

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Pessoa, table ="
Pessoa">
<id name="Id"  >
     <generator class="native" />
</id>
<property name="Nome">

  < column ="nome" length="60"  not-null="true"/> 
</class>
</hibernate-mapping>



Exemplo com Fluent NHibernate

 public class PessoaMap : ClassMap<Pessoa>
    {
        PessoaMap()
        {
            Id(c => c.Id).GeneratedBy.Native();
            Map(c => c.Nome).Length(60).Not.Nullable();
        }
    }


Não iremos entrar em detalhes sobre mapeamento utilizando arquivo xml.hbm.

Referencias:
Mapeamento com Fluent NHibernate
Mapeamento com Fluent NHibernate utilizando herança