Usando MySql com ADO.NET Entity Framework 4 - Parte III
Camada de negócios com Entity Framework 4 e Mysql.
Você não gostou da qualidade deste conteúdo?
(opcional) Você gostaria de comentar o que não lhe agradou?
No artigo Usando MySql com ADO.NET Entity Framework 4 - Parte II foi mostrada a camada de acesso a dados (DAL) usando o Entity Framework.
Então criou-se as classes abstratas, interface e classes concretas. A partir da criação da camada de dados, temos que criar a lógica de negócio inerente ao domínio da aplicação, e neste artigo serão mostrado apenas os métodos que devem compor a camada de negócios para assim desenvolvermos a camada de apresentação.
A camada Business (BLL)
Na camada Business, ou seja, no projeto Entity.BLL é necessário adicionar a referência do projeto Entity.DAL, para que a camada Business consiga visualizar as classes criadas na camada de dados (Entity.DAL). Também deve-se referenciar a System.Data.Entity. Para fazer isso, clique com o botão direito sobre o projeto Entity.BLL e selecione Add Reference, e, a seguir, na guia Projects selecione o projeto Entity.DAL e pressione ok.
A camada de negócio é a responsável pela implementação da lógica da aplicação, expondo esta lógica para a camada de apresentação. Definição dos métodos no projeto Entity.BLL
Dentro do projeto Entity.BLL, crie as classes que serão responsáveis pelas regras de negócio do nosso projeto. As classes são : BSecao, BCategoria e BProduto. Clique com o botão direito sobre o Entity.BLL e selecione Add > New Item. A seguir selecione o template Class e informe o nome BSecao.cs e clique em Add. Faça isso para as outras duas classes.
Como o nossa aplicação é somente para fins didáticos e muito simples, não será inclusa nenhuma regra de negócio, ou seja não será criado nenhum método para as classes BSecao, BCategoria e BProduto, mas para conseguir acessar o métodos da classe abstrata CRUD é necessário aplicar herança nessas classes utilizando as classes concretas ProdutoData, SecaoData e CategoriaData, já que estas herdam a classe abstrata CRUD.
NOTA: Uma classe abstrata não pode ser instanciada. Por este motivo são necessárias as classes concretas.
Aplicando herança para as classes BSecao, BCategoria e BProduto, como mostra o código na Listagem 1 à 3.
Listagem 1: Classe BSecao
using Entity.DAL;
namespace Entity.BLL
{
public class BSecao : SecaoData
{
}
}Listagem 2: Classe BCategoria
using Entity.DAL;
namespace Entity.BLL
{
public class BCategoria : CategoriaData
{
}
}Listagem 3: Classe BProduto
using Entity.DAL;
namespace Entity.BLL
{
public class BProduto : ProdutoData
{
}
}Conclusão
Neste artigo, apresentou-se a construção da camada de negócios para fins didáticos a partir da existência da camada de dados. Usou-se a ferramenta de desenvolvimento Visual Studio 2010 e a linguagem C#.
Abraços.
Leia também
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
21 COMENTÁRIOS
Paulo Freire
Mais uma vez PARABÉNS!!
Gostei muito da matéria e acho que falta material em MySQL na Web.
A Devmedia tem muito materia em .Net com SQL Server.
Gostaria de ver algo simples sobre o uso de login com o mysql.
No site tem artigos e video aulas antiga e ao seguir o passo-a-passo da erro no Web.Config
Acho que seria uma boa materia.
Fica a Dica.
Abraços.
Fica com Deus.
no seu e ficaria muito grato se fizesse esse favor. Seria só esses métodos pra finalizar seu exemplo?
o autor ensina a trabalhar com stored procedures com o EF.
Como complemento, sugiro ainda a leitura deste artigo, onde é ensinado a trabalhar com Stored Procedures no MySQL: http://nelsonborges.wordpress.com/2009/12/05/entity-framework-%E2%80%93-usando-stored-procedures/.
Abraço.
public static int Operacao(int? OPERACAO,int? CODIGO,int? COD_BANCO,string Numero1,string Numero2,string UltNumero)
{
ECEntidadesDataContext dataClass = new ECEntidadesDataContext();
var retorno = dataClass.SP_TALOES_CHEQUE(OPERACAO, CODIGO, COD_BANCO, Numero1, Numero2, UltNumero);
return retorno;
}
o meu retorno nesse caso é o numero do registro que na procedure eu retorno em todas as operacoes assim: Return Codigo; no Mysql estou retornando assim: select codigo;
mas eu não sei como trabalhar assim usando MySQL com EF.
eu não vou trabalhar no EF com Tabelas e sim so com procedures, veja abaixo outro exemplo com uma procedure de consulta:
public static List<SP_PESQ_TALOES_CHEQUEResult> PesquisaTaloes(int? COD_BANCO, int? CODIGO)
{
ECEntidadesDataContext dataClass = new ECEntidadesDataContext();
var uso = dataClass.SP_PESQ_TALOES_CHEQUE(COD_BANCO, CODIGO);
List<SP_PESQ_TALOES_CHEQUEResult> iMenu = uso.ToList();
return iMenu;
}
se alguem puder me socorrer, desde de já meu muito obrigado.
CREATE DEFINER = 'root'@'localhost' PROCEDURE `SP_CADBANCO`(
IN V_operacao INTEGER(11),
IN V_codigo INTEGER(11),
IN V_cod_banco INTEGER(11),
IN V_numero1 Varchar(10),
IN V_numero2 Varchar(10),
IN V_ultnumero Varchar(10),
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
IF (V_operacao = 1) THEN
SET V_codigo = (SELECT MAX(codigo) FROM `tb_sesmt_vinc`);
IF (V_codigo IS NULL) THEN
SET V_codigo = 1;
ELSE
SET V_codigo = V_codigo + 1;
END IF;
INSERT INTO `tb_banco` (codigo,cod_banco,numero1,numero2,ultnumero)
VALUES (V_codigo,V_cod_banco,V_numero1,V_numero2,V_ultnumero);
ELSEIF (V_operacao = 3) THEN
DELETE FROM `tb_banco` WHERE codigo = V_codigo;
END IF;
SELECT V_codigo;
END;
Você já pensou em usar o Entity Framework ?
Acho que facilita seu trabalho.
você está usando que versão do VS ?
Quanto ao mapeamento feito para o SQL Server, você entende como ele funciona ?
CREATE DEFINER = 'root'@'localhost' PROCEDURE `SP_TESTE_PESQ`(IN var_nome varCHAR(50))
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
select tb_colaboradores.NOME,tb_colaboradores.FUNCAO,
tb_epi.NOME_EPI,tb_epi.VALIDADE,tb_epi.CA,
tb_cad_retirada_epis_itens.data,tb_cad_retirada_epis_itens.qtde,
tb_cad_retirada_epis.cadastro
FROM tb_colaboradores, tb_epi,tb_cad_retirada_epis, tb_cad_retirada_epis_itens
WHERE
tb_colaboradores.ID = tb_cad_retirada_epis.cod_funcionario and
tb_cad_retirada_epis_itens.cod_cad_retirada_epis = tb_cad_retirada_epis.codigo and
tb_epi.ID_EPI = tb_cad_retirada_epis_itens.cod_epis
and (var_nome = '' OR nome_epi like var_nome);
END;
Veja se ajuda:
http://stackoverflow.com/questions/8224147/entity-framework-and-mysql-stored-procedures
http://stackoverflow.com/questions/7739120/vs-2010-entity-framework-with-mysql-stored-procedure-doesnt-seem-to-work
E principalmente:
http://stackoverflow.com/questions/5287460/mysql-entity-framework-4-0-stored-procedure-field-mapping
Boa sorte
Muito Obrigado.



