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. 
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.
Listagem 2- Definição da propriedade ID Também, no código da Interface foi adicionado dois Namespace.
3-) A partir disso, será necessário criar uma classe abstrata que irá implementar a Interface ICrud.cs.
4-) Definição do código no arquivo Crud.cs, como mostrado na Listagem 3.
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.
Listagem 4 - Classe Partial tbcategoria
Listagem 5- Classe Partial tbproduto
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.
Listagem 7 - Classe concreta SecaoData
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

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; }
}
}
| Nota: Veja aqui uma definição para Interface na orientação a objetos |
| 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. |
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();
}
}
}
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
{
}
}
namespace Entity.DAL
{
public partial class tbproduto : Interfaces.IID
{
}
}
namespace Entity.DAL
{
public partial class tbsecao : Interfaces.IID
{
}
}
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

Você está em:
canal .net
Flavia Moreira
Space do autor
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




5
0
