domingo, 11 de junho de 2017

Android - Google Play Services

Dica básica.

Use isso:
compile 'com.google.android.gms:play-services-maps:x.x.x'
compile 'com.google.android.gms:play-services-location:x.x.x'

Assim você usará somente as dependências que precisa,
 com isso o apk ficará mais leve.

ao invéz disso:
compile 'com.google.android.gms:play-services:x.x.x'
 
x.x.x = versão do play-services.
 
Isso fará com que todo as dependências sejam adicionadas no pacote apk,
fazendo com que o apk fique maior e consequentemente o aplicativo ficará mais
"pesado". 
 

segunda-feira, 1 de maio de 2017

C# - NHibernateHelper

Abaixo será apresentado como fazer conexão.

Classe NHibernateHelper.cs


 public static class NHibernateHelper
    {
       
 private static string StringConexao = "coloque aqui sua string de conexão";
        private static ISessionFactory _sessionFactory;

        public static ISessionFactory SessionFactory
        {
            get
            {
                if (_sessionFactory == null)
                    Configurar();
                return _sessionFactory;
            }
        }

        public static void Configurar()
        {
            FluentConfiguration configuracao = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2012
                .ConnectionString(StringConexao)
                .ShowSql())
                .Mappings(c => c.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()))
                .ExposeConfiguration(c => new SchemaUpdate(c).Execute(true, true));

            _sessionFactory = configuracao.BuildSessionFactory();
        }
        public static ISession AbrirSessao()
        {
            return _sessionFactory.OpenSession();
        }      
    }

Vamos agora criar método Inserir a qual fará chamada à nossa classe NHibernateHelper.


 public void Inserir(T entidade)
        {
            using (ISession session = NHibernateHelper.AbrirSessao())
            {
                using (ITransaction transacao = session.BeginTransaction())
                {
                    try
                    {
                        session.Save(entidade);
                        transacao.Commit();
                    }
                    catch (Exception ex)
                    {
                        if (!transacao.WasCommitted)
                        {
                            transacao.Rollback();
                        }
                        throw new Exception("Erro ao inserir registro. " + ex.Message);
                    }
                }
            }
        }

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