Pílula de Entity Framework 4 - Novas operações
Existem muitos recursos novos no Entity Framework 4.0 , sem contar que uma nova atualização já esta prevista para breve, mas vamos devagar e sempre.
Neste artigo eu quero abordar 4 novos métodos que podemos usar no Entity Framework 4.0:
Contains()
,
Single()
,
SingleOrDefault()
DefaultIfEmpty()
.Para isso eu vou usar o Visual Web Developer 2010 Express Edition (poderia ter usado qualquer ferramenta da nova versão da plataforma .NET) e criar um projeto Web chamado EF4_NovosrRecursos: (poderia criar um projeto console, ou Windows application fique à vontade)
Em seguida vamos definir um Entity Data Model(EDM) para o banco de dados Northwind.mdf do SQL Server 2005 apenas para testarmos os novos recursos.
No menu Project -> Add New Item , selecione ADO .NET Entity Data Model e informe o nome Northwind.edmx e clique em Add;
A seguir selecione a opção : Generate from database e clique em Next>;
Selecione a conexão com o banco de dados Northwind.mdf e aceite a opção para salvar a entity connection no arquivo Web.Config com o nome NorthwindEntities e clique em Next>;
A seguir vamos selecionar uma tabela para realizar o mapeamento ORM. No nosso exemplo eu vou usar a tabela Products. Marque as opções conforme indicado abaixo e aceite o nome padrão para o Model: NorthwindModel;
A final veremos a entidade Product gerada pelo EDM mapeando os campos da tabela Products na figura 1.0;
Na figura 2.0 vemos o Model Browser com as respectivas entidades e tabelas bem como o nome do Context gerado : NorthwindEntities;
Fig 1.0 | Fig 2.0 |
Agora já temos tudo pronto para mostrar os novos recursos do EF4.
Vamos incluir uma página Web no projeto, menu Project -> Add New Item -> Web Form com o nome Default.aspx;
A seguir inclua no formulário web os controles : TextBox, Button, ListBox e Label conforme o leiaute abaixo:
A idéia básica e permitir a execução de consultas usando a entidade mapeada e exibir o resultado no controle ListBox(lstbDados) do formulário web.
No arquivo code-behind Default.aspx.vb vamos definir primeiro o contexto que vamos usar declarando:
Dim contexto As New NorthwindEntities
Em seguida vamos usar cada evento Click dos botões para incluir o código correspondente. Vejamos cada um deles:
1- Contains
O método Contains() realiza uma comparação case insensitive(não leva em conta maiúsculas e minúsculas) com partes da palavra no campo.
Como o método retorna uma coleção temos que usar o .First() mesmo se existir somente um único Item na coleção;
A seguir temos o código do evento Click que recebe o texto informado pelo usuário em txtContains.Text a ser comparado com o nome do produto;
Em seguida verificamos se foi selecionado a exibição de somente um elemento ou de todos os elementos para exibir o resultado usando ou não o método First().
|
2- Single()
O método Single() é usado no exemplo na mesma consulta, mas desta vez somente retorna um único item, logo não precisamos usar o método .First().
Se houver mais de um item retornado irá ocorrer uma exceção.
|
3- SingleOrDefault
A documentação declara que SingleOrDefault retorna um único elemento, um elemento específico de uma sequência de valores, ou o valor padrão se o tal elemento não for encontrado; isto significa que se o mesmo for um tipo complexo você pode obter um valor null.
Protected Sub btnSingleOrDefault_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSingleOrDefault.Click Try 'executa uma consulta usando SingleOrDefault 'retorna somente um elemento da sequencia 'ou retorna o elemento padrão (pode ser nulo) Dim SingleOrDefaultExemplo = (From f In contexto.Products Where f.ProductName.Contains(txtSingleOrDefault.Text) Select f.ProductName).SingleOrDefault() 'limpa o listbox lstbDados.Items.Clear() 'lista o único retornado lstbDados.Items.Add(SingleOrDefaultExemplo) Catch ex As Exception lblmsg.Text = ex.Message End Try End Sub |
4- DefaultIfEmpty
O método DefatulIfEmpty irá retornar uma coleção ou se nada for encontrado irá retornado o que você passou como resultado. No exemplo usado se nada for encontrado o texto : "Não encontrado." será retornado.
Protected Sub btnDefaultIfEmpty_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnDefaultIfEmpty.Click Try 'executa uma consulta usando DefaultIfEmpty 'retorna somente um elemento da sequencia 'ou retorna um texto se nada for encontrado Dim DefaultIfEmptyExemplo = (From f In contexto.Products Where f.ProductName.Contains(txtDefaultIfEmpty.Text) Select f.ProductName).DefaultIfEmpty("Não encontrado") 'limpa o listbox lstbDados.Items.Clear() 'temos que usar o First pois retorna uma coleção lstbDados.Items.Add(DefaultIfEmptyExemplo.First) Catch ex As Exception lblmsg.Text = ex.Message End Try End Sub |
E com isso apresentei os quatro novos recursos do Entity Framework 4.0.
Aguarde mais artigos sobre o Entity Framework.
Pegue o projeto completo aqui: EF4_NovosRecursos.zip
Eu sei é apenas EF mas eu gosto...
Referências: