Inicial > Ado.Net > Mapeamento com o Entity FrameWork usando 3 camadas (4° Parte)

Mapeamento com o Entity FrameWork usando 3 camadas (4° Parte)

Neste ultimo post sobre nosso projeto de Entity FrameWork, iremos criar o projeto de Business e Presentation e consumir nosso projeto de entidades e dados criado nos artigos anteriores(veja aqui a  1° Parte ,  2° Parte e 3° Parte).

Você deve ter reparado que na  3° Parte desse artigo, fizemos referência a uma interface chamada IEntityID, agora iremos a implementação da mesma. Dentro do projeto de entities crie uma pasta com o nome de Interfaces e adicione um item do tipo interface, chame ela de IEntityID, e deixe seu código da seguinte forma :

    public interface IEntityID

    {

        int Id { get; set; }

    }

               

                Essa interface esta dizendo que todos que o implementam precisam conter uma propriedade chamda Id, desta forma podemos fazer referência deste campo em nossas classes genéricas.

Crie um novo projeto do tipo Class Library na sua solução chamado BancoHoras.Business, neste projeto iremos criar uma classe genérica que irá fazer as chamadas do método de acesso a dados e popular a entidade, exclua a class default que é criada junto com o projeto, e insira um novo item do tipo Class chamado BusinessBase, deixe a classe com o código abaixo:

/// <summary>

    /// Classe Genérica de Negócio, contém as regras de CRUD.

    /// </summary>

    /// <typeparam name="T"></typeparam>

    public class BusinessBase<T> where T : EntityObject, Projeto.Teste.Entties.Interfaces.IEntityID

    {

        /// <summary>

        /// Método da Business para Buscar Todos

        /// </summary>

        /// <returns></returns>

        public List<T> BuscarTodos()

        {

            return new AcessoDados<T>().GetAll().ToList();

        }

       

        /// <summary>

        /// Método responsável para buscar uma entidade

        /// </summary>

        /// <param name="id"></param>

        /// <returns></returns>

        public T Buscar(Guid id)

        {

            return new AcessoDados<T>().GetById(id);

        }

 

        /// <summary>

        /// Método para inserir uma entidade

        /// </summary>

        /// <param name="entidade"></param>

        public void Inserir(T entidade)

        {

            new AcessoDados<T>().Criar(entidade);

        }

 

        /// <summary>

        /// Método para editar uma entidade

        /// </summary>

        /// <param name="entidade"></param>

        public void Editar(T entidade)

        {

            new AcessoDados<T>().Atualizar(entidade);

        }

       

        /// <summary>

        /// Método para excluir uma entidade

        /// </summary>

        /// <param name="id"></param>

        public void Excluir(int id)

        {

            new AcessoDados<T>().Excluir(id);

        }

    }

 

Repare que estamos implementando um tipo genérico <T> na classe assim como suas restrições, ou seja, esta linha class BusinessBase<T> where T : EntityObject, Projeto.Teste.Entties.Interfaces.IEntityID esta dizendo que todas as entidades que forem consumir esta classe deverão herdar de EntityObject e da interface IEntityID.

Agora você já pode criar seus projetos de apresentação (Windows Form ou Web Application) e consumir as classes que foram criadas, para isso basta apenas chamar a instancia da classe e passar a entidade, em seguida o método que deseja, veja o exemplo abaixo para inserir um registro:

Entties.Modelo.Recurso recurso = new Projeto.Teste.Entties.Modelo.Recurso();

recurso.Id = 10;

recurso.ResourceName = "Nelson Borges – "+i.ToString();

recurso.ResourceGroup = "Tecnologia – Desenvolvedor";

recurso.ResourceCreatedDate = DateTime.Now.Date;

recurso.ResourceLatestAvailableTo = DateTime.Now.Date;

recurso.ResourceModifiedDate = DateTime.Now.Date;

 

new BusinessBase<Entties.Modelo.Recurso>().Inserir(recurso);

 

//Para excluir um registro

new BusinessBase<Entties.Modelo.Recurso>().Excluir(recurso.Id);

 

//Para editar um registro

new BusinessBase<Entties.Modelo.Recurso>().Editar(recurso.Id);

 

No nosso exemplo usamos bastante a linguagem Linq, no meu blog você também poderá encontrar alguns post´s falando a respeito, veja -:>  Linq

Também estou disponibilizando o link para download da solução completa para que possam fazer o estudo do código: Baixar Projeto , espero que esta série de post ajudem vocês no dia-a-dia, dúvidas deixem no blog ou no meu e-mail que assim que possível irei responder.

 

Abraço, e boa semana

 

Nelson Borges

 

 

Categorias:Ado.Net
  1. Cristian
    28 de agosto de 2009 às 4:01

    Olá Daniel,Estou estudando o Entity Framework, baixei o seu projeto e achei bem interessante. Adicione você no messenger para tirar algumas dúvidas e trocar algumas idéias.Parabéns pelos artigos.Abraço.

  2. Vitor
    10 de setembro de 2009 às 4:04

    Olá Daniel… Parabens pelo seu artigo ,Me ajudou e muito. Estou com uma fuvida ..Como eu faça ou relacionamento de N : N ? Brigadao pela ajuda

  3. Eduardo
    21 de setembro de 2010 às 16:10

    Olá,Cara, você enfrentou um erro na camada DAL:The underlying provider failed on Open.Isso ocorre quando vou executar o SaveChanges(), pelo que vi, quando faço o using da entidade, no context a conexão está fechada…Abraço e parabéns pela série de artigos!

  4. Eduardo
    22 de setembro de 2010 às 21:45

    Consegui resolver o problema acima, adicionando a string de conexão no web.config

  5. juliano
    2 de novembro de 2010 às 23:30

    Olá Nelson. No seu exemplo a Interface tem uma propriedade do tipo int com o nome ID;Porém no código fonte de exemplo, ela é do tipo GUID. Eu estou precisando de uma classe genérica para o meu CRUD, porém as chaves (IDS) das minhas entidades, são todas do tipo inteiro. Tem idéia de como posso fazer isto funcionar?

  6. Leandro Rafael Lopes
    16 de dezembro de 2010 às 8:55

    Olá Nelson, o link para download do projeto não está funcionando, poderia libera-lo novamente ou enviar uma cópia para mim?

    Muito Obrigado!!!

    []’s

  7. Leonardo
    27 de junho de 2011 às 17:40

    Olá Nelson, o link não está funcionando, poderia ajustar para mim ?
    Obrigado

  8. Jorge Cavalcante
    2 de novembro de 2011 às 21:26

    Link Não Funciona 😦

  1. No trackbacks yet.

Deixe um comentário