Vamos dar sequência em nossa série sobre Fluent NHibernate
- Começando com Fluent NHibernate
- Mapeamentos com Fluent NHibernate
- Usando o Fluent NHibernate
- Gerando arquivos HBM
- Gerar arquivo SQL do mapeamento
- Como funciona o Lazy Load
- Configurando Log4NET
Nessa terceira etapa vamos aprender como usar o Fluent NHibernate fazendo um CRUD com os mapeamentos que fizemos no post anterior
Classe Conexão
Antes de mais nada, vamos criar uma classe para realizar a conexão com o banco que retorna uma sessão para que possamos realizar as tarefas no banco, veja abaixo o código
public class Conexao
{
public static ISessionFactory CreateSessionFactory()
{
FluentConfiguration configuration = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(
x => x.FromConnectionStringWithKey("ConexaoBanco")).ShowSql())
.Mappings(x => x.FluentMappings.AddFromAssemblyOf<Pessoa>());
return configuration.BuildSessionFactory();
}
}
Linha 5: Iniciamos a classe para realizar a configuração
Linha 6: Configuramos o banco
Linha 7: Configuramos a string de conexão que está no arquivo de configuração (web.config, App.config)
Linha 8: Adicionamos o assembly onde está nossas entidades. Não é preciso adicionar todas suas entidades, apenas uma para o Fluent saber em qual assembly buscar as informações
Linha 10: Retornamos uma session
Cadastrar Departamento
Primeiramente vamos cadastrar os departamentos
[TestMethod]
public void Cadastrar_Departamento()
{
var sessionFactory = Conexao.CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
Departamento _obj1 = new Departamento();
_obj1.Nome = "Diretoria";
_obj1.Descricao = "Departamento diretoria";
_obj1.DataCadastro = DateTime.Now;
session.Save(_obj1);
Departamento _obj2 = new Departamento();
_obj2.Nome = "Comercial";
_obj2.Descricao = "Departamento comercial";
_obj2.DataCadastro = DateTime.Now;
session.Save(_obj2);
transaction.Commit();
}
}
}
Linha 4: Criamos uma conexão com o banco
Linha 6: Abrimos a conexão com o banco
Linha 8: Abrimos uma transação
Linha 10: Criamos um objeto do tipo Departamento
Linha 11: Atribuimos seus valores
Linha 14: Mandamos salvar o objeto
Linha 22: Persistimos as informações no banco
Cadastrar Grupo
Agora vamos cadastrar os Grupos, segue o mesmo padrão descrito acima
[TestMethod]
public void Cadastrar_Grupo()
{
var sessionFactory = Conexao.CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
Grupo _obj1 = new Grupo();
_obj1.Nome = "Grupo 1";
_obj1.Descricao = "Descrição do Grupo1";
_obj1.DataCadastro = DateTime.Now;
session.Save(_obj1);
Grupo _obj2 = new Grupo();
_obj2.Nome = "Grupo 2";
_obj2.Descricao = "Descrição do Grupo 2";
_obj2.DataCadastro = DateTime.Now;
session.Save(_obj2);
transaction.Commit();
}
}
}
Cadastrar Pessoa Fisica
Vamos cadastrar uma pessoa fisica, veja que estamos instânciando a classe PessoaFisica que herda de Pessoa
[TestMethod]
public void Cadastrar_Pessoa_Fisica()
{
var sessionFactory = Conexao.CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
PessoaFisica _obj = new PessoaFisica();
_obj.Nome = "Nome da pessoa fisica";
_obj.Endereco = "Endereço da pessoa fisica";
_obj.Cep = "12345678";
_obj.Email = "pessoa1@gmail.com";
_obj.DataCadastro = DateTime.Now;
_obj.Cpf = "12345678900";
_obj.Nacionalidade = "Brasil";
_obj.Departamento = session.Get<Departamento>(1);
_obj.Status = Status.Inativo;
session.SaveOrUpdate(_obj);
transaction.Commit();
}
}
}
Linha 19: Aqui temos que recuperar um Departamento que foi cadastrado anteriormente, por isso usamos a o opação Get passando o código
Linha 21: Usamos o nosso Enum para dizer o status da pessoa
Cadastrar Pessoa Juridica
Para a pessoa juridica segue o mesmo padrão da pessoa fisica
[TestMethod]
public void Cadastrar_Pessoa_Juridica()
{
var sessionFactory = Conexao.CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
PessoaJuridica _obj = new PessoaJuridica();
_obj.Nome = "Nome da pessoa juridica";
_obj.Endereco = "Endereço da pessoa juridica";
_obj.Cep = "12345678";
_obj.Email = "pessoa1@gmail.com";
_obj.DataCadastro = DateTime.Now;
_obj.Cnpj = "12345678901234";
_obj.WebSite = "www.pessoajuridica.com.br";
_obj.Departamento = session.Get<Departamento>(2);
_obj.Status = Status.Inativo;
session.SaveOrUpdate(_obj);
transaction.Commit();
}
}
}
Cadastrar Pessoa Fisica com Telefones
Agora vamos cadastrar os Telefones de uma pessoa, veja abaixo o código
[TestMethod]
public void Cadastrar_Pessoa_Fisica_Com_Telefone()
{
var sessionFactory = Conexao.CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
PessoaFisica _obj = new PessoaFisica();
_obj.Nome = "Nome da pessoa fisica com telefone";
_obj.Endereco = "Endereço da pessoa fisica com telefone";
_obj.Cep = "12345678";
_obj.Email = "pessoa1@gmail.com";
_obj.DataCadastro = DateTime.Now;
_obj.Cpf = "12345678900";
_obj.Nacionalidade = "Brasil";
_obj.Departamento = session.Get<Departamento>(1);
_obj.Status = Status.Inativo;
_obj.Telefones.Add(new Telefone()
{
CodigoDdd = 41,
Numero = 123456
});
_obj.Telefones.Add(new Telefone()
{
CodigoDdd = 41,
Numero = 654321
});
session.SaveOrUpdate(_obj);
transaction.Commit();
}
}
}
Linha 23 / 29 : Criamos uma nova instância da classe Telefone e adicionamos na propriedade Telefones que é uma lista
Cadastrar Pessoa Fisica com Telefones e com Grupos
Agora vamos cadastrar os Grupos de uma pessoa, veja abaixo o código
[TestMethod]
public void Cadastrar_Pessoa_Fisica_Com_Telefone_Com_Grupo()
{
var sessionFactory = Conexao.CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
PessoaFisica _obj = new PessoaFisica();
_obj.Nome = "Nome da pessoa fisica com telefone com telefone";
_obj.Endereco = "Endereço da pessoa fisica com telefone com telefone";
_obj.Cep = "12345678";
_obj.Email = "pessoa1@gmail.com";
_obj.DataCadastro = DateTime.Now;
_obj.Cpf = "12345678900";
_obj.Nacionalidade = "Brasil";
_obj.Departamento = session.Get<Departamento>(1);
_obj.Status = Status.Inativo;
_obj.Telefones.Add(new Telefone()
{
CodigoDdd = 41,
Numero = 123456
});
_obj.Telefones.Add(new Telefone()
{
CodigoDdd = 41,
Numero = 654321
});
_obj.Grupos.Add(session.Get<Grupo>(1));
_obj.Grupos.Add(session.Get<Grupo>(2));
session.SaveOrUpdate(_obj);
transaction.Commit();
}
}
}
Linha 35 / 35 : Recupero o grupo e adiciona na lista de Grupo
Deletar Pessoa Fisica
Quando vamos deletar um registro, temos que tomar cuidado com os Cascade para não deletar entidades que não deviam ser deletadas
Nesse caso, quando deletar uma pessoa fisica, também será deletado seus Telefones e os Grupos que ela pertence da tabela (GruposToPessoas)
[TestMethod]
public void Deletar_Pessoa_Fisica()
{
var sessionFactory = Conexao.CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var _obj = session.Get<PessoaFisica>(6);
session.Delete(_obj);
transaction.Commit();
}
}
}
Veja que a tabela Grupos não foi deletado.
Pesquisando Pessoa Fisica
[TestMethod]
public void Pesquisar_Pessoa_Fisica()
{
var sessionFactory = Conexao.CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
var _obj = session.Get<PessoaFisica>(5);
Assert.IsNotNull(_obj);
Assert.IsTrue(_obj.Telefones.Count > 0);
}
}
Em nosso próximo post vamos ver como gerar os famosos arquivos HBM através do fluent
Deixe seu comentário, opinião, critica
Aquele abraço!





