Compartilhar via


Introdução ao Entity Framework Core

Neste tutorial, você criará um aplicativo Xamarin.Forms que executa o acesso a dados em um banco de dados SQLite usando o Entity Framework Core.

Você pode seguir o tutorial usando o Visual Studio no Windows ou no Visual Studio para Mac.

Dica

Você pode visualizar o exemplo de deste artigo no GitHub.

Pré-requisitos

Instale um dos seguintes:

Esta documentação fornece instruções detalhadas de instalação passo a passo para cada plataforma.

Baixar e executar o projeto de exemplo

Para executar e explorar este aplicativo de exemplo, baixe o código no GitHub.

Depois de baixado, abra o arquivo de solução EFGettingStarted.sln no Visual Studio ou no Visual Studio para Mac e execute o aplicativo na plataforma de sua escolha.

Quando o aplicativo for iniciado pela primeira vez, ele preencherá o banco de dados SQLite local com duas entradas que representam blogs.

Captura de tela de todas as páginas de lista de blogs

Clique no botão Adicionar na barra de ferramentas.

Uma nova página será exibida que permite que você insira informações sobre um novo blog.

Captura de tela da nova página de edição de blog

Preencha todas as informações completas e clique em Salvar na barra de ferramentas. O novo blog salvará no banco de dados SQLite do aplicativo e será exibido na lista.

Você pode clicar em uma das entradas do blog na lista e ver as postagens desse blog.

Captura de tela da página de lista de postagens do blog

Clique em Adicionar na barra de ferramentas.

Em seguida, aparece uma página que permite que você preencha informações sobre uma nova postagem no blog.

Captura de tela da página de adicionar novo post

Preencha todas as informações e, na barra de ferramentas, clique em Salvar.

A nova postagem será associada à postagem no blog em que você clicou em uma etapa anterior e salvará no banco de dados SQLite do aplicativo e mostrará na lista.

Volte para a página da lista de blogs. E clique em Excluir Todos os na barra de ferramentas. Todos os blogs e suas postagens correspondentes serão excluídos do banco de dados SQLite do aplicativo.

Captura de tela do aplicativo com todos os blogs excluídos

Explorar o código

As seções a seguir orientarão você pelo código no projeto de exemplo que lê, cria, atualiza e exclui dados de um banco de dados SQLite usando o EF Core com o Xamarin.Forms.

Supõe-se que você esteja familiarizado com os tópicos do Xamarin.Forms de exibindo dados e navegando por páginas.

Importante

O Entity Framework Core usa reflexão para invocar funções que o vinculador Xamarin.iOS pode remover enquanto estiver em configurações de modo de versão. Você pode evitar isso de duas maneiras.

  • A primeira é adicionar --linkskip System.Core aos argumentos mtouch adicionais nas opções de build do iOS.
  • Como alternativa, defina a de comportamento do Vinculador de do Xamarin.iOS para Don't Link nas opções de Build do iOS. Este artigo explica mais sobre o vinculador Xamarin.iOS incluindo como definir o comportamento no Xamarin.iOS. (Essa abordagem não é ideal, pois pode resultar em rejeição da loja).

Pacotes do NuGet do Entity Framework Core

Para criar aplicativos Xamarin.Forms com o EF Core, instale o pacote para os provedores de banco de dados EF Core que você deseja direcionar para todos os projetos na solução Xamarin.Forms. Este tutorial usa o provedor SQLite.

O seguinte pacote NuGet é necessário em cada um dos projetos na solução Xamarin.Forms.

  • Microsoft.EntityFrameworkCore.Sqlite

Classes de modelo

Cada tabela no banco de dados SQLite acessada por meio do EF Core é modelada em uma classe. Neste exemplo, duas classes são usadas: Blog e Post que podem ser encontradas na pasta Models.

As classes de modelo são compostas apenas por propriedades, que modelam colunas no banco de dados.

  • Blog.cs

    using System;
    using System.Collections.Generic;
    
    namespace EFGetStarted
    {
        public class Blog
        {
            public int BlogId { get; set; }
            public string Url { get; set; }
    
            public List<Post> Posts { get; set; } = new List<Post>();
        }
    }
    
  • A propriedade Posts define uma relação pai-filho entre Blog e Post.

  • Post.cs

    using System;
    namespace EFGetStarted
    {
        public class Post
        {
            public int PostId { get; set; }
            public string Title { get; set; }
            public string Content { get; set; }
    
            public int BlogId { get; set; }
            public Blog Blog { get; set; }
        }
    }
    
  • As propriedades BlogId e Blog estão associadas ao objeto pai Blog no caso da instância do Post.

Contexto de dados

A classe BloggingContext está localizada na pasta Services e herda da classe DbContext do EF Core. Um DbContext é usado para agrupar consultas e alterações de banco de dados.

using System;
using System.IO;
using Microsoft.EntityFrameworkCore;
using Xamarin.Essentials;

namespace EFGetStarted
{
    public class BloggingContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }

        public BloggingContext()
        {
            SQLitePCL.Batteries_V2.Init();

            this.Database.EnsureCreated();
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            string dbPath = Path.Combine(FileSystem.AppDataDirectory, "blogs.db3");

            optionsBuilder
                .UseSqlite($"Filename={dbPath}");
        }
    }
}
  • Ambas as propriedades nessa classe de tipo DbSet são usadas para operar nas tabelas subjacentes que representam Blogs e Postagens.
  • O SQLitePCL.Batteries_V2.Init() é necessário no construtor para iniciar o SQLite no iOS.
  • A função OnConfiguring configura o local do banco de dados SQLite no dispositivo físico.

Criar, ler, atualizar & excluir

Veja a seguir algumas instâncias no aplicativo em que o EF Core é usado para acessar o SQLite.

Ler

  • Retornar todos os registros.

    • A função OnAppearing de BlogsPage.xaml.cs retorna todos os registros Blog e os armazena em uma variável List.

      using (var blogContext = new BloggingContext())
      {
          var theBlogs = blogContext.Blogs.ToList();
      }
      
  • Retornar registros específicos.

    • A função OnAppearing de PostsPage.xaml.cs retorna Post registros que contêm um BlogIdespecífico.

      using (var blogContext = new BloggingContext())
      {
          var postList = blogContext.Posts
              .Where(p => p.BlogId == BlogId)
              .ToList();
      }
      

Criar

  • Insira um novo registro.
    • A função Save_Clicked de AddBlogPage.xaml.cs insere um novo objeto Blog no banco de dados SQLite.

      var blog = new Blog { Url = blogUrl.Text };
      
      using (var blogContext = new BloggingContext())
      {
          blogContext.Add(blog);
      
          await blogContext.SaveChangesAsync();
      }
      

Atualização

  • Atualize um registro existente.
    • A função Save_Clicked de AddPostPage.xaml.cs atualiza um objeto Blog existente com um novo Post.

      var newPost = new Post
      {
          BlogId = BlogId,
          Content = postCell.Text,
          Title = titleCell.Text
      };
      
      using (var blogContext = new BloggingContext())
      {
          var blog = await blogContext
              .Blogs
              .FirstAsync(b => b.BlogId == BlogId);
      
          blog.Posts.Add(newPost);
      
          await blogContext.SaveChangesAsync();
      }
      

Excluir

  • Exclua todos os registros com propagação para registros filhos.
    • A função DeleteAll_Clicked de BlogsPage.xaml.cs exclui todos os registros Blog no banco de dados SQLite e propaga as exclusões para todos os registros filhos PostBlog.

      using (var blogContext = new BloggingContext())
      {
          blogContext.RemoveRange(blogContext.Blogs);
      
          await blogContext.SaveChangesAsync();
      }
      

Próximas etapas

Nesta introdução, você aprendeu a usar um aplicativo Xamarin.Forms para acessar um banco de dados SQLite usando o Entity Framework Core.