Array
(
)

Ajuda com Entity Framework

William Maximo
|
MVP
    19 mai 2014

Boa noite.
Estou desenvolvendo uma aplicacao windows form, e resolvi utilizar o EF.
Em determinado momento me deparei com algumas situações em que não sei se estou fazendo uso correto deste framework. Se possivel gostaria de sua ajuda quanto a umas dúvidas abaixo.
1º Estou desenvolvendo minha aplicacão dentro de um Windows Application, la eu separei em namespace os seguintes recursos no sistema
>Modelo (Classe para mapear o banco)
>Dal (Classe que contem os métodos para persistir as informações no banco)
>Formulario (as forms do sistema)
É correto separar assim os objetos dentro de um sistema?
2º Eu vi que o EF possui um recurso muito interessante que é o LazyLoad, mas como estou iniciando com o EF, não sei se é muito viavel utiliza-lo, pois este recurso depende do EF estar com a conexão aberta, e como eu vi que qualquer alteração no objeto quando o mesmo esta vinculado a um EF reflete diretamente no banco, e se eu não tomar cuidado posso acabar alterando ou excluindo registros do banco por acidente.
Para evitar isso, estou utilizando o EF desta maneira, quero saber a opinião se esta correto o uso ou estou perdendo algum recurso da ferramenta,
ex:
public List<Fornecedor> ObterLista(Fornecedor fornecedor)
{
using (FastSnackContext context = new FastSnackContext())
{
var fornecedores = new List<Fornecedor>();
if (fornecedor.FornecedorId > 0)
{
}
else if (!string.IsNullOrEmpty(fornecedor.RazaoSocial))
{
fornecedores = (from f in context.Fornecedores
where (f.RazaoSocial.Contains(fornecedor.RazaoSocial))
orderby f.RazaoSocial ascending
select f).ToList();
}
else
{
fornecedores = (from f in context.Fornecedores
orderby f.RazaoSocial
select f).ToList();
}
return fornecedores;
}
}

public void Adicionar(Fornecedor fornecedor)
{
try
{
using (FastSnackContext context = new FastSnackContext())
{
context.Fornecedores.Add(fornecedor);
context.SaveChanges();
}
}
catch (Exception)
{
MessageBox.Show("Erro ao incluir novo Fornecedor");
}
}
public bool Alterar(Fornecedor fornecedor)
{
try
{
using (FastSnackContext context = new FastSnackContext())
{
context.Fornecedores.Attach(fornecedor);
context.Entry(fornecedor).State = EntityState.Modified;
context.SaveChanges();
return true;
}
}
catch (Exception e)
{
MessageBox.Show("Erro ao atualizar o fornecedor!\nDetalhes do erro: " + e.Message);
return false;
}
}
3ª Gostaria de um exemplo se possivel de uma classe Venda, se a lista de ItensVendido faz parte da classe como um List<ItenVendido>.
Desde já agradeço. Qualquer ajuda ou comentário é bem vindo.

Joel Rodrigues
   - 21 mai 2014

Opa, tudo em paz?
Sobre a primeira questão, essa é uma divisão muito comum. Geralmente o pessoal usa DAL+BLL+VIEW ou DAL+DTO+VIEW, ou seja, ACESSO A DADOS + MODELOS + INTERFACE.
Na revista Easy .NET Magazine 31 tivemos um artigo interessante sobre isso: Aplicações multicamadas em .NET

Joel Rodrigues
   - 21 mai 2014

Sobre a segunda dúvida, não há problema no seu código. Você está utilizando os métodos corretamente, então não peque por Excesso de Engenharia e se preocupe com coisas que não são fundamentais ainda.

Joel Rodrigues
   - 21 mai 2014

Sobre a terceira questão, o EF já mapeias as tabelas do banco considerando os relacionamentos. Experimente mapear duas tabelas que estejam relacionadas entre si. Automaticamente será criada uma lista de objetos X na classe Y (considerando que o relacionamento de 1 Y para N X).

William Maximo
|
MVP
    22 mai 2014


Citação:
Sobre a terceira questão, o EF já mapeias as tabelas do banco considerando os relacionamentos. Experimente mapear duas tabelas que estejam relacionadas entre si. Automaticamente será criada uma lista de objetos X na classe Y (considerando que o relacionamento de 1 Y para N X).


Obrigado pelo retorno quanto as 3 questões.
Estou lendo a revista que voce indicou.