O Entity Framework é um framework de código aberto (ORM) para ADO.NET que faz parte do .NET Framework. O EF fornece uma experiência de acesso a dados LINQ fortemente tipada nos bancos de dados relacionais incluindo acesso ao SQL Server de uma forma direta e eficiente pois ele elimina a necessidade da maior parte do código de acesso a dados que os desenvolvedores geralmente precisam escrever. A primeira versão do Entity Framework foi incluído com o .NET Framework 3.5 Service Pack 1 e Visual Studio 2008 Service Pack 1, lançado em 11 de agosto de 2008. Esta versão foi amplamente criticada, mesmo atraindo um “voto de confiança” assinado por cerca de mil desenvolvedores, entre varias criticas uma das maiores era que na época não era possível utilizar os bancos de dados lideres de mercado como Oracle e outros, a Oracle lançou posteriormente provedores de acesso e ferramentas para utilizar Oracle com o Entity Framework integrados em seu pacote de acesso a dados chamado ODAC.
A versão 6.0 foi lançada em 17 de outubro de 2013 e é agora um projeto open source licenciado sob Apache License v2. Como ASP.NET MVC Framework, seu código-fonte está hospedado no CodePlex usando Git. Esta versão tem uma série de melhorias para suporte a sua aproximação Code First.
As capacidades avançadas do Entity Framework, funcionam com uma série de servidores de banco de dados, incluindo o Microsoft SQL Server, Oracle e DB2. Incluem um mecanismo sofisticado de mapeamento que pode lidar com esquemas reais de banco de dados e funciona bem com procedimentos armazenados. Fornecem ferramentas integradas do Visual Studio para criar visualmente modelos de entidade e gerar de forma autônoma modelos a partir de um banco de dados existente. Os novos bancos de dados podem ser implantados a partir de um modelo, que também pode ser editado à mão para controle total.
Entity Framework: http://www.asp.net/entity-framework
CodePlex: https://entityframework.codeplex.com/
Abordagens Entity Framework
Schema First – criamos a estrutura de entidade a partir de um banco de dados existente. Usamos todas as outras funcionalidades, tais como o modelo, sincronização de banco de dados e a geração de código, da mesma maneira que usamos na abordagem Model First.
Model First – o modelo de banco de dados é criado pela primeira vez usando o designer ORM no Visual Studio. Uma vez que o modelo que consiste em entidades e relações foi concebido, o banco de dados físico vai ser gerado a partir do modelo.
Code First – criamos as classes primeiro e, em seguida, geramos o banco de dados das classes diretamente. No código em primeiro lugar, não vamos usar o Entity Designer (para editar .edmx arquivos) em tudo.
Usando o Entity Framework
1 – Crie uma nova aplicação MVC usando o template padrão, utilize o código abaixo para criar os modelos e o objeto de entidade de banco de dados:
2 – Após utilizar os códigos abaixo, de um Build na sua aplicação. Você pode abrir a sua instancia MS SQL Server no SQL Management Studio e verificar o banco de dados criado automaticamente com o mesmo nome da sua entidade de banco de dados. Você também pode ver que os modelos geraram tabelas com suas respectivas chaves primarias e relacionamentos sem que você precise fazer nada:
3 – Você também pode manipular o banco de dados diretamente pelo Visual Studio usando a janela chamada Server Explorer:
4 – Em Data Connection adicione uma nova conexão e escolha o seu Data Source:
5 – Aponte para sua instancia do banco de dados e escolha o banco de dados da sua aplicação:
6 – Neste ponto você pode manipular seu banco de dados à partir de uma janela do Visual Studio:
7 – Abra o conteúdo de sua tabela clicando com o botão direito e escolhendo a opção Show Table Data. Insira os dados manualmente:
8 – Compile sua aplicação para receber o seguinte resultado:
Exemplo:
Neste exemplo utilizamos o Entity Framework em uma aplicação ASP.NET MVC para criar o banco de dados e suas tabelas e listar os dados contidos em uma tabela usando a abordagem Code First.
C#
Model
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApplication1.Models { public class CursosModelo { // Propriedades public int Id { get; set; } public string Curso { get; set; } public string Linguagem { get; set; } public string Descr { get; set; } // Modelo Relacional (DB) // Aponta para o identificador da grade public int GradeID { get; set; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApplication1.Models { public class GradeModelo { // Propriedades public int Id { get; set; } public string Dia { get; set; } public string hora { get; set; } // Aponta para o Curso public ICollection<CursosModelo> Cursos { get; set; } } }
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; namespace WebApplication1.Models { public class MinhaAppMeuDB : DbContext { public DbSet<CursosModelo> Cursos { get; set; } public DbSet<GradeModelo> Grades { get; set; } } }
View – Home
@model IEnumerable<WebApplication1.Models.CursosModelo> @{ ViewBag.Title = "Home Page"; } <div class="jumbotron"> <h1>Desenvolvimento Aberto - ASP.NET</h1> <p class="lead">ASP.NET - MVC - Entity Framework - HTML, CSS and JavaScript.</p> </div> @foreach (var item in Model) { <div> <h4>@item.Curso</h4> <div>@item.Linguagem </div> <div>@item.Descr</div> <hr /> </div> }
Controller – Home
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using WebApplication1.Models; namespace WebApplication1.Controllers { public class HomeController : Controller { // Cria instancia do banco de dados MinhaAppMeuDB DB = new MinhaAppMeuDB(); public ActionResult Index() { var modelo = DB.Cursos.ToList(); return View(modelo); } // Cria método override protected override void Dispose(bool disposing) { // Limpa os recursos if (DB != null) { DB.Dispose(); } base.Dispose(disposing); } public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } public ActionResult Contact() { ViewBag.Message = "Your application description page."; return View(); } } }
Estou tendo problema na linha DB.Dispose(); O Dispose está tachado em vermelho e mostrando “Generate method stub for ‘Dispose’ in … application.Models.MinhaAppMeuDB”
Erro meu, achei aqui, eu não tinha herdado MinhaAppMeuDB de DbContext…