Utilizando o Entity Framework Core 1 no ASP.NET MVC

9 mar

Fala Galera,

Neste post iremos demonstrar como utilizar o EF Core 1 no ASP.NET MVC.

Conforme falado no último post o Entity Framework sofreu algumas mudanças para se adaptar ao novos desafios criado pela arquitetura .NET Core multiplataforma.

Não viu o post “Introdução ao Entity Framework Core 1”, clique aqui.

Vamos criar uma aplicação ASP.NET MVC porém o EF Core 1 pode ser utilizado em qual projeto .NET.

Também utilizaremos um banco de dados SQL SERVER para que entendimento seja mais fácil.

O objetivo é criar um CRUD (CREATE, RETREAVE, UPDATE, DELETE) básico assim poderemos focar nas novas funcionalidades do EF Core 1.

Os pré-requisitos para utilização do EF Core 1 são:

  • Visual Studio 2015 ou Visual Studio 2013
  • Versão atualizada do NuGet Package Manager
  • Versão atualizada do Windows Power Shell

Criando o projeto

Para criar nosso projeto ASP.NET MVC utilizaremos o Visual Studio Community 2015 (clique aqui para fazer o downloadpodemos utilizar outro Visual Studio porém o .NET Framework deverá ser no mínimo o 4.5.1

EFCore1

Escolha ASP.NET Web Application depois iremos selecionar a opção MVC e clique em OK

Adicionando o EF Core 1 ao projeto

Com o projeto MVC criado devemos agora adicionar os pacotes do EF Core 1.

O EF Core 1 está disponível via NuGet então para isso basta digitar o comando Install-Package EntityFramework.Core -Pre no Package Manager Console

Para exibir o Package Manager Console vá em Tools -> NuGet Package Manager -> Package Manager Console.

EFCore2

Escolhendo o Database Provider

Nosso projeto utilizará o SQL SERVER para isso devemos instalar o provider correspondente executando o comando Install-Package EntityFramework.MicrosoftSqlServer –Pre  no Package Manager Console

EFCore3

Para saber a lista de Database Providers disponíveis clique aqui

Adicionando Migrations do EF Core 1 ao Projeto

Para adicionar os Migrations do EF Core 1 devemos executar o comando Install-Package EntityFramework.Commands –Pre no Package Manager Console

EFCore4

Criando o Modelo

Agora que estamos com  todas as dependências instalada, vamos criar nossas Models. Primeiro vamos criar uma model de Comment conforme código abaixo:

public class Comment
{
    public Int32 Id { get; set; }
    public DateTime CreateDate { get; set; }
    public String Text { get; set; }
    public Int32 PostId { get; set; }
}

Depois vamos adicionar uma model de Post conforme código abaixo:

public class Post
{
    public Int32 Id { get; set; }
    public String Title { get; set; }
    public string Content { get; set; }
    public string Author { get; set; }
    public List<Comment> Comments { get; set; }
}

 

Criando o Contexto

Vamos criar nosso contexto, ele será responsável por gerenciar as operações do banco de dados

Vamos criar uma classe chamada Context conforme código abaixo:

public class Context : DbContext
   {
       public DbSet<Post> Posts { get; set; }
       public DbSet<Comment> Comments { get; set; }

       protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
       {
           var connectionString = ConfigurationManager.ConnectionStrings["BlogConnection"].ToString();

           //Usando VS 2015 LocalDB - Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Blog.mdf;Integrated Security=True
           //Usando VS 2013 LocalDB - Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Blog.mdf;Integrated Security=True
           optionsBuilder.UseSqlServer(connectionString);
       }

       protected override void OnModelCreating(ModelBuilder modelBuilder)
       {
           modelBuilder.Entity<Post>().HasKey(x => x.Id);
           modelBuilder.Entity<Post>().Property(x => x.Id);
           modelBuilder.Entity<Post>().Property(x => x.Title).IsRequired();
           modelBuilder.Entity<Post>().Property(x => x.Content).IsRequired();

           modelBuilder.Entity<Comment>().HasKey(x => x.Id);
           modelBuilder.Entity<Comment>().Property(x => x.Id).UseSqlServerIdentityColumn();
           modelBuilder.Entity<Comment>().Property(x => x.Text).IsRequired();
           modelBuilder.Entity<Comment>().Property(x => x.CreateDate).ForSqlServerHasDefaultValue<DateTime>(DateTime.Now);

           modelBuilder.Entity<Post>().HasMany<Comment>(x=> x.Comments).WithOne();
       }
   }

 

Criando a base de dados:

Com o modelo e o contexto criado, vamos configurar nossa base de dados para isso iremos executar os comandos de migração no Package Manager Console:

  • Add-Migration InitialSetup
  • Update-Database

Dica: Os comandos de migração serão alterados na plataforma DNX (.NET Core 1) assim no futuro usaremos os seguintes comandos:

  • dnx ef migrations add InitialSetup
  • dnx ef database update

Veja as novas opções do EF Core 1 na figura abaixo:

EFCommands

Inserindo um novo Post

Com a base de dados configurada e os modelos criados temos que criar a programação necessária para realizar a inserção dos novos objetos na base de dados

Vamos criar um controller chamado PostController e adicionar o código abaixo

public class PostController : Controller
   {
       Context context = new Context();

       public ActionResult List(string message = "")
       {
           var models = this.context.Posts.ToList();

           if (!String.IsNullOrEmpty(message))
               ViewBag.Success = message;

           return View(models);
       }

       public ActionResult Create()
       {
           return View();
       }

       [HttpPost]
       public ActionResult Create(Post model)
       {
           if (!ModelState.IsValid)
               return View(model);

           context.Posts.Add(model, Microsoft.Data.Entity.GraphBehavior.SingleObject);
           context.SaveChanges();

           return RedirectToAction("List", new { message = "Post criado com sucesso!" });

       }

       public ActionResult Edit(int id)
       {
           var post = this.context.Posts.Where(x => x.Id == id).FirstOrDefault();
           return View(post);
       }

       [HttpPost]
       public ActionResult Edit(Post model)
       {
           if (!ModelState.IsValid)
               return View(model);

           context.Posts.Add(model);
           context.Entry<Post>(model).State = Microsoft.Data.Entity.EntityState.Modified;
           context.SaveChanges();

           return RedirectToAction("List", new { message = "Post editado com sucesso!" });

       }

       public ActionResult Delete(int id)
       {
           var post = this.context.Posts.Where(x => x.Id == id).FirstOrDefault();

           this.context.Posts.Remove(post);
           this.context.SaveChanges();

           return RedirectToAction("List", new { message = "Post excluído com sucesso" });
       }

   }

 

Como podemos ver na imagem abaixo um novo post está sendo adicionado na nossa base de dados.

FinalCore1

EF Core 1 passou por diversas mudanças internas para atender o cenário multiplataforma porém o uso em si para nós desenvolvedores não mudou tanto assim.

O que acharam ? Não deixem de comentar!

O código completo da utilização do EF Core 1 está disponibilizado no GitHub através deste link

Abs e até a próxima.

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *