Este é um post disponível para assinantes MVPEste post também está disponível para assinantes da .net Magazine DIGITAL
ou para quem possui Créditos DevMedia. Clique aqui para saber mais!
ou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Code-First do Entity Framework 4 - Revista .Net Magazine 96
O artigo implementa a criação de um CRUD buscando demonstrar o uso do ASP.NET MVC Framework em conjunto com o EF4, abordando a técnica de criação code-first.
[fechar]
Você não gostou da qualidade deste conteúdo?
(opcional) Você gostaria de comentar o que não lhe agradou?
.net Magazine 96
[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da .net Magazine 96
[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da .net Magazine 96
Grande parte dos desenvolvedores utiliza a tecnologia orientada a objetos para o desenvolvimento de novas aplicações, mudando sua camada de apresentação, lógica e controle, mas mantendo a persistência dos dados utilizando bancos de dados relacionais e, isso se deve, principalmente, aos sistemas legados.
Devido à disparidade entre o modelo conceitual e o modelo lógico do banco de dados, denominada impedância, surgem algumas dificuldades na implementação de aplicações que sejam desenvolvidas utilizando linguagem orientada objeto e armazenamento em banco de dados relacional, já que com isso acaba-se gastando tempo demais com mudanças relativas aos bancos de dados, quando o foco deveria ser no desenvolvimento das aplicações.
O termo mapeamento objeto/relacional (ORM) refere-se à técnica de mapeamento de uma representação de dados a partir de um modelo de objeto para um modelo de dados relacional com um esquema baseado em SQL.
Dentre as ferramentas para ORM, tem-se o NHibernate e o Fluent NHibernate. O NHibernate é uma ferramenta de mapeamento objeto/relacional para ambientes .NET. Além de tratar do mapeamento entre as classes e as tabelas do banco de dados, ele facilita a recuperação de dados de consulta permitindo reduzir o tempo de desenvolvimento. O Fluent NHibernate oferece uma alternativa ao padrão XML de mapeamento de arquivos do NHibernate. Ao invés de escrever documentos XML (arquivos .hbm.xml), o Fluent NHibernate permite escrever mapeamentos fortemente tipados em código C#, o que permite uma fácil refatoração, melhor legibilidade e código mais conciso.
Nota do DevMan
Refactoring ou Refatoração trata-se de um processo que tem como principais objetivos tornar o código mais legível e com maior manutenibilidade. Menciona-se processo, pois refactoring não consiste em apenas mudar o código que já funciona, pois quando há qualquer tipo de alteração, há riscos de introdução de novos bugs. Refactoring é algo maior, que envolve pequenos passos, testes, disciplina e força de vontade. Serve para melhorar evolutivamente o código através de pequenas incursões, sejam em novas aplicações ou durante a manutenção corretiva e evolutiva das existentes.
O ADO.NET Entity Framework (EF4), é uma plataforma criada pela Microsoft e, propõe o mapeamento, entre o modelo de objetos e o esquema específico de armazenamento, amenizando a disparidade do paradigma objeto/relacional. Ele fornece uma série de benefícios para escrever aplicações persistentes, eliminando a maioria do código de acesso a dados que os desenvolvedores usualmente necessitam escrever.
O Entity Framework possui portabilidade para os mais variados bancos de dados, sendo um concorrente direto do NHibernate, tendo como diferencial as várias ferramentas visuais e recursos nativos para o Visual Studio, sendo a referência da Microsoft no contexto do mapeamento objeto/relacional.
Com o EF 4.0 houveram mudanças significativas, algumas melhorias foram feitas. Além da já existente abordagem chamada database-first, que consiste em desenvolver um modelo a partir de um banco de dados existente, também é possível trabalhar utilizando as seguintes abordagens:
- Model First: permite iniciar com um modelo vazio. Possibilita definir o modelo e, em seguida, gerar o banco de dados, mapeamentos e classes a partir do modelo definido.
- Code-only ou Code-First: permite utilizar o Entity Framework usando POCO (Plain Old CLR Objects).
POCO vem do termo POJO - Plain Old Java Object - utilizado pela comunidade Java. São classes que não implementam interfaces específicas de um framework, são independentes destas ferramentas, mas podem implementar métodos e comportamentos. O problema das classes possuírem dependências de algum framework específico é a dificuldade em testá-las e dar manutenção, torna-se muito complicado utilizar estas classes em outros projetos. Com a utilização de classes POCO esse tipo de problema não ocorre.
"
Este é um post disponível para assinantes MVP
Devido à disparidade entre o modelo conceitual e o modelo lógico do banco de dados, denominada impedância, surgem algumas dificuldades na implementação de aplicações que sejam desenvolvidas utilizando linguagem orientada objeto e armazenamento em banco de dados relacional, já que com isso acaba-se gastando tempo demais com mudanças relativas aos bancos de dados, quando o foco deveria ser no desenvolvimento das aplicações.
O termo mapeamento objeto/relacional (ORM) refere-se à técnica de mapeamento de uma representação de dados a partir de um modelo de objeto para um modelo de dados relacional com um esquema baseado em SQL.
Dentre as ferramentas para ORM, tem-se o NHibernate e o Fluent NHibernate. O NHibernate é uma ferramenta de mapeamento objeto/relacional para ambientes .NET. Além de tratar do mapeamento entre as classes e as tabelas do banco de dados, ele facilita a recuperação de dados de consulta permitindo reduzir o tempo de desenvolvimento. O Fluent NHibernate oferece uma alternativa ao padrão XML de mapeamento de arquivos do NHibernate. Ao invés de escrever documentos XML (arquivos .hbm.xml), o Fluent NHibernate permite escrever mapeamentos fortemente tipados em código C#, o que permite uma fácil refatoração, melhor legibilidade e código mais conciso.
Nota do DevMan
Refactoring ou Refatoração trata-se de um processo que tem como principais objetivos tornar o código mais legível e com maior manutenibilidade. Menciona-se processo, pois refactoring não consiste em apenas mudar o código que já funciona, pois quando há qualquer tipo de alteração, há riscos de introdução de novos bugs. Refactoring é algo maior, que envolve pequenos passos, testes, disciplina e força de vontade. Serve para melhorar evolutivamente o código através de pequenas incursões, sejam em novas aplicações ou durante a manutenção corretiva e evolutiva das existentes.
O ADO.NET Entity Framework (EF4), é uma plataforma criada pela Microsoft e, propõe o mapeamento, entre o modelo de objetos e o esquema específico de armazenamento, amenizando a disparidade do paradigma objeto/relacional. Ele fornece uma série de benefícios para escrever aplicações persistentes, eliminando a maioria do código de acesso a dados que os desenvolvedores usualmente necessitam escrever.
O Entity Framework possui portabilidade para os mais variados bancos de dados, sendo um concorrente direto do NHibernate, tendo como diferencial as várias ferramentas visuais e recursos nativos para o Visual Studio, sendo a referência da Microsoft no contexto do mapeamento objeto/relacional.
Com o EF 4.0 houveram mudanças significativas, algumas melhorias foram feitas. Além da já existente abordagem chamada database-first, que consiste em desenvolver um modelo a partir de um banco de dados existente, também é possível trabalhar utilizando as seguintes abordagens:
- Model First: permite iniciar com um modelo vazio. Possibilita definir o modelo e, em seguida, gerar o banco de dados, mapeamentos e classes a partir do modelo definido.
- Code-only ou Code-First: permite utilizar o Entity Framework usando POCO (Plain Old CLR Objects).
POCO vem do termo POJO - Plain Old Java Object - utilizado pela comunidade Java. São classes que não implementam interfaces específicas de um framework, são independentes destas ferramentas, mas podem implementar métodos e comportamentos. O problema das classes possuírem dependências de algum framework específico é a dificuldade em testá-las e dar manutenção, torna-se muito complicado utilizar estas classes em outros projetos. Com a utilização de classes POCO esse tipo de problema não ocorre.
"
A exibição deste artigo foi interrompida.
Este é um post disponível para assinantes MVPEste post também está disponível para assinantes da .net Magazine DIGITAL
ou para quem possui Créditos DevMedia. Clique aqui para saber mais!
ou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Everton Coimbra De Araújo
https://www.facebook.com/evertoncoimbradearaujo Desde 1987 atua na área de treinamento e desenvolvimento. É mestre em Ciência da Computação, e professor efetivo da UTFPR, Campus Medianeira. Tem Atuado também em cursos de EaD oferecidos pela UAB e ETEC. Autor de livros pela Visual Books: http:/...
O que você achou deste post?
14 COMENTÁRIOS
Homero Osvaldo Magajewski
Senhores
Tentei seguir o artigo mas, sem os namespaces explícitados ao codificar a primeira linha: [Table("Products")] já obtive um erro mostrando que o type Table não foi reconhecido.
Assim fica difícil.
Homero
Tentei seguir o artigo mas, sem os namespaces explícitados ao codificar a primeira linha: [Table("Products")] já obtive um erro mostrando que o type Table não foi reconhecido.
Assim fica difícil.
Homero
[há +1 ano] -
Responder
Wesley Yamazack
Olá Homero, o código-fonte no post não é publicado por completo na revista apenas um trecho do mesmo, caso queria visualizar o código-fonte por completo basta você clicar no link "código-fonte" no topo da página.
Qualquer dúvida conte conosco.
Um abraço.
[há +1 ano] -
Responder
[autor]
Everton Coimbra De Araújo
Prezado Homero, muito obrigado pelo seu interesse.
O erro ocorreu pois o termo Table, nesse caso, é uma anotação, para solucionar o é preciso referenciar o namespace System.ComponentModel.DataAnnotations.
Segue os demais namespaces referenciados na solução:
System;
System.Collections.Generic;
System.Data.Entity;
System.Linq;
System.Data;
System.Web;
System.Web.Mvc;
System.Web.Routing;
Qualquer dúvida estou a disposição.
O erro ocorreu pois o termo Table, nesse caso, é uma anotação, para solucionar o é preciso referenciar o namespace System.ComponentModel.DataAnnotations.
Segue os demais namespaces referenciados na solução:
System;
System.Collections.Generic;
System.Data.Entity;
System.Linq;
System.Data;
System.Web;
System.Web.Mvc;
System.Web.Routing;
Qualquer dúvida estou a disposição.
[há +1 ano] -
Responder
Rodney Teixeira
Ola meu exemplo funcionou perfeitamente, mas tenho uma duvida o arquivo Northwind.dbml deveria ficar na pasta App_Data para organizar melhor o projeto mas quando arrasto para lá a aplicação para de funcionar o mesmo ocorre com as classes.
[há +1 mês] -
Responder
[autor]
Everton Coimbra De Araújo
Olá Rodney. Isso já aconteceu conosco também. Tem a ver com a maneira que seu projeto tenha sido criado, pelo que pude identificar (website ou applcation). Eu penso que seja um bug do VS, pois ele perde referências aos Namespaces. Solução? Eu tive que recriar o projeto. Talvez sua situação seja diferente da nossa. Caso não consiga resolver, envie todo o projeto compactado para evertoncoimbra@gmail.com e poderemos analisar e te retornar.
Abraços
Abraços
[há +1 mês] -
Responder
Erica Fernanda Berniche
Ewerton/Angelice,
Minha aplicação apresenta o seguinte erro:
One or more validation errors were detected during model generation:
System.Data.Edm.EdmEntityType: : EntityType 'GruposRepository' has no key defined. Define the key for this EntityType.
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �GruposRepositories� is based on type �GruposRepository� that has no keys defined.
Não consegui identificar o que pode estar o ocorrendo. Vocês poderiam me auxiliar?
Minha aplicação apresenta o seguinte erro:
One or more validation errors were detected during model generation:
System.Data.Edm.EdmEntityType: : EntityType 'GruposRepository' has no key defined. Define the key for this EntityType.
System.Data.Edm.EdmEntitySet: EntityType: EntitySet �GruposRepositories� is based on type �GruposRepository� that has no keys defined.
Não consegui identificar o que pode estar o ocorrendo. Vocês poderiam me auxiliar?
[há +1 mês] -
Responder
Wesley Yamazack
Olá Erica, entramos em contato com o autor para que ele possa te auxiliar, tudo bem ? Peço que aguarde um pouco até que o mesmo possa retornar o contato.
Um abraço.
Um abraço.
[há +1 mês] -
Responder
[autor]
Everton Coimbra De Araújo
Olá Erica,
Exclua da classe CadastroContext a seguinte linha:
public DbSet<GruposRepository> GruposRepositories { get; set; }
Isso deve resolver seu problema.
Um Abraço
Exclua da classe CadastroContext a seguinte linha:
public DbSet<GruposRepository> GruposRepositories { get; set; }
Isso deve resolver seu problema.
Um Abraço
[há +1 mês] -
Responder
Erica Fernanda Berniche
Obrigada Ewerton e Wesley.
O exemplo funcionou após as instruções.
O exemplo funcionou após as instruções.
[há +1 mês] -
Responder
Infnet Serviços E Treinamentos De Informatica Ltda
Olá Ewerton,
Tive o mesmo problema relatado pela Erica e a exclusão da linha indicada por você resolveu o problema. No entanto, gostaria de saber para que serve essa linha. Pelo visto funcionou para alguns e falhou para outros.
Poderia dar uma explicação?
Tive o mesmo problema relatado pela Erica e a exclusão da linha indicada por você resolveu o problema. No entanto, gostaria de saber para que serve essa linha. Pelo visto funcionou para alguns e falhou para outros.
Poderia dar uma explicação?
[há +1 mês] -
Responder
[autor]
Everton Coimbra De Araújo
Olá,
Na verdade essa linha era apenas um teste que não deveria ter sido enviada junto dos fontes.
Acredito que tenha falhado pra todos.
Abraços
Na verdade essa linha era apenas um teste que não deveria ter sido enviada junto dos fontes.
Acredito que tenha falhado pra todos.
Abraços
[há +1 mês] -
Responder
Daniella Adriana Da Costa
Pessoal, encontra-se disponível o novo fonte desse artigo.
[há +1 mês] -
Responder
Michel Gomes Da Silva
Onde eu consigo os fontes?
[há +1 mês] -
Responder
Wesley Yamazack
Olá Michel, no topo desta mesma página você tem a opção "código-fonte".
Um abraço e até mais.
Um abraço e até mais.
[há +1 mês] -
Responder
Cursos relacionados
Publicidade

código fonte


