DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Usando MySql com ADO.NET Entity Framework 4 - Parte II

Este arquivo tem como objetivo continuar com o desenvolvimento de uma aplicação usando o Entity Framework com Mysql.

No artigo Usando MySql com ADO.NET Entity Framework 4 - Parte I foi introduzido o porquê do Entity Framework 4, a criação do mapeamento relacional a partir da existência de uma base de dados, a criação da estrutura para um projeto em três camadas. Sendo assim, a partir do que foi explicado, podemos começar com a criação das Interfaces, Classes e métodos responsáveis pela camada de acesso DAL. Antes de começar com a definição dos métodos, queria mostrar a User Interface que iremos criar ao decorrer dos artigos, pois temos que saber onde iremos chegar com estes tutorias, não é mesmo? A Figura 1.0 traz a interface administrativa do nosso sistema.

Figura 1.0 - User Interface Administrativa

Definição dos métodos no projeto Entity.DAL

A criação de um projeto bem organizado e com comentários facilita em manutenções posteriores. Para tanto vamos começar na criação de folders e Interfaces. Crie um folder com nome de Interfaces e dentro do folder interfaces, crie duas interfaces ICrud.cs e IID.cs que conterá as assinaturas dos métodos.
Nota: Clique com o botão direito sobre o folder interfaces e selecione Add |New Item. A seguir selecione o template Code | Interface e informe o nome ICrud.cs e clique em Add. Faça o mesmo para a interface IID.cs

1- No arquivo ICrud.cs defina do código, como mostrado na Listagem 1.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects.DataClasses;
using System.Linq.Expressions;
 
namespace Entity.DAL.Interfaces
{
    public interface ICrud<T> where T: EntityObject, Interfaces.IID
    {
 
            bool Create(T entity);
            bool Update(T entity);
            bool Delete(int id, T entity);
            T GetByID(int id, T entity);
            IQueryable<T> ALL();
           
    }
}	



Listagem 1- Definição dos métodos CRUD A interface ICrud é fortemente tipada e está recebendo como parâmetro uma entidade , onde T é do tipo EntityObject , ou seja, pode-se usar como parâmetro qualquer Entidade do modelo criado. Ainda sim, deve-se herdar a interface IID, que será usada pelos métodos. Você deve estar curioso para saber o porquê de herdar a interface IID. A interface IID foi criada com o objeto de trabalhar com a propriedade ID de cada entidade. Por seguinte, podemos definir os principais métodos para a manipulação no banco de dados. 2-) Definição do código no arquivo IID.cs, como mostrado na Listagem 2.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; 

namespace Entity.DAL.Interfaces
{
    public interface IID
    {
        Int32 ID { get; }
    }
}

 
Listagem 2- Definição da propriedade ID Também, no código da Interface foi adicionado dois Namespace.
Nota: Veja aqui uma definição para Interface na orientação a objetos
3-) A partir disso, será necessário criar uma classe abstrata que irá implementar a Interface ICrud.cs.
Clique com o botão direito sobre o projeto Entity.DAL e selecione Add |New Item. A seguir selecione o template Code | Class e informe o nome Crud.cs e clique em Add.
4-) Definição do código no arquivo Crud.cs, como mostrado na Listagem 3.


namespace Entity.DAL

{

    public abstract class Crud<T> : Interfaces.ICrud<T> where T : EntityObject, Interfaces.IID

    {

//criando uma estancia do contexto definido pelo Entity Data Model no arquivo Model.Edmx

        private testEntities context = new testEntities();

public bool Create(T entity)

        {

            try

            {

                context.AddObject(entity.GetType().Name, entity);

                context.SaveChanges();

                return true;

            }

            catch

            {

                return false;

            }

        }

        public bool Update(T entity)

        {

            try

            {

                context.ApplyCurrentValues<T>(entity.GetType().Name, entity);

return true;

            }

            catch

            {

                return false;

            }

        }

public IQueryable<T> ALL()

        {

            return context.CreateObjectSet<T>();

        }

public bool Delete(int id, T entity)

        {

            try

            {

                var _entity = this.GetByID(id,entity);

context.DeleteObject(_entity);

                context.SaveChanges();

return true;

            }

            catch

            {

                return false;

                throw;

            }

        }

public T GetByID(int id, T entity)

        {

            string tablename = entity.GetType().Name;

            return context.CreateQuery<T>(tablename).Where(q => q.ID == id).FirstOrDefault();

        }

}

}

Listagem 3- Implementando métodos de manipulação No código apresentado na Listagem 3.0 foi criado uma estância do contexto definido pelo Entity Data Model no arquivo Model.Edmx. Você pode observar o nome na propriedade, como mostra a Figura 2. Figura 2 - Propriedade Entity Container Name A expressão Where(q => q.ID == id) dentro do método GetByID, só é possível porque utilizamos herança.

5-) Criar três classes partial com os nomes de tbsecao,tbcategoria e tbproduto. Estas classes deveram herdar a Interface IID, como mostrado na Listagem 4,5 e 6.


namespace Entity.DAL

{

    public partial class tbcategoria : Interfaces.IID

    {

}
}
Listagem 4 - Classe Partial tbcategoria
namespace Entity.DAL

{

    public partial class tbproduto : Interfaces.IID

    {

}
}

Listagem 5- Classe Partial tbproduto


namespace Entity.DAL

{

    public partial class tbsecao : Interfaces.IID

    {

}
}

Listagem 6 - Classe Partial tbsecao
Estas classes devem ter o mesmo nome das classes partial que estão dentro do arquivo Model.Designer.cs. Poderíamos colocar a herança dentro das classes que estão dentro do Model.Designer, porém caso o modelo seja gerado novamente poderá ocorrer perda de informações. O próximo passo é criar as três classes concretas SecaoData, CategoriaData e ProdutoData, como traz a Listagem 7,8 e 9.
namespace Entity.DAL

{

    public class SecaoData : Crud<tbsecao>

    {

        //criando uma estancia do contexto definido pelo Entity Data Model no arquivo Model.Edmx

private testEntities context = new testEntities();

public tbsecao GetSecao()

        {

            tbsecao _secao = new tbsecao();

            return _secao;

        }

        public IQueryable<tbsecao> Filter(string _filter)

        {

            IQueryable<tbsecao> _tbsecao = null;

try

            {

                _tbsecao = context.tbsecao.Where(s => s.TITULO.IndexOf(_filter) > -1);

return _tbsecao;

            }

            catch { return _tbsecao = null; }  

        }      

}
}

Listagem 7 - Classe concreta SecaoData
namespace Entity.DAL

{

    public class CategoriaData : Crud<tbcategoria>

    {

}
}

Listagem 8 - Classe concreta CategoriaData



namespace Entity.DAL

{

    public class  ProdutoData: Crud<tbproduto>

    {

}
}


Listagem 9 - Classe concreta ProdutoData



Neste artigo, mostrou a criação das interfaces e classes da camada DAL.
No próximo artigo será mostrado a camada de negócios.
Autor(a): Flávia Moreira
e-mail: flaviamoreira@dowhile.com.br




    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!



Publicidade
Autor
Flavia Moreira

Flávia Moreira graduada em engenharia da computação. Trabalho como desenvolvedora de sistemas. Publico videos no Msdn: http://msdn.microsoft.com/pt-br/silverlight/ Site http://www.dowhile.com.br


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
5   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03