Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste tutorial, você cria 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 o Visual Studio para Mac.
Dica
Você pode ver o exemplo de deste artigo no GitHub.
Pré-requisitos
Instale um dos seguintes:
-
Visual Studio 2019 versão 16.3 ou posterior com esta carga de trabalho:
- Desenvolvimento Mobile com .NET
- Visual Studio para Mac
Esta documentação fornece instruções detalhadas de instalação passo a passo para cada plataforma.
Baixe e execute 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 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.
Clique no botão Adicionar na barra de ferramentas.
Será exibida uma nova página que permite inserir informações sobre um novo blog.
Preencha todos os dados e clique Guardar na barra de ferramentas. O novo blog será salvo no banco de dados SQLite do aplicativo e será exibido na lista.
Você pode clicar em uma das entradas de blog na lista e ver quaisquer posts para esse blog.
Clique Adicionar na barra de ferramentas.
Em seguida, aparece uma página que permite preencher informações sobre uma nova postagem no blog.
Preencha todas as informações e clique Salvar na barra de ferramentas.
A nova postagem será associada à postagem de blog em que você clicou em uma etapa anterior e será salva no banco de dados SQLite do aplicativo e mostrada na lista.
Volte para a página da lista de blogs. E clique 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.
Explore 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 Xamarin.Forms.
Supõe-se que você esteja familiarizado com os tópicos do Xamarin.Forms de exibindo dados e navegando entre páginas.
Importante
O Entity Framework Core usa reflexão para invocar funções que o vinculador Xamarin.iOS pode remover durante configurações do modo Release. Você pode evitar isso de duas maneiras.
- A primeira é adicionar
--linkskip System.Coreao Argumentos mtouch adicionais nas opções iOS Build. - Como alternativa, defina o de comportamento do Xamarin.iOS Linker como
Don't Linknas opções iOS Build. Este artigo explica mais sobre o do vinculador Xamarin.iOS, incluindo como definir o comportamento no Xamarin.iOS. (Esta abordagem não é ideal, pois pode resultar em rejeição da loja).
Pacotes NuGet principais do Entity Framework
Para criar aplicativos Xamarin.Forms com o EF Core, instale o pacote para o(s) provedor(es) de banco de dados EF Core que 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 de 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
Postsdefine uma relação pai-filho entreBlogePost.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
BlogIdeBlogremontam ao objeto paiBlogpara a instância doPost.
Contexto dos dados
A classe BloggingContext está localizada na pasta Services e herda da classe EF Core DbContext. 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 nesta classe de tipo
DbSetsão usadas para operar nas tabelas subjacentes que representam Blogs e Posts. - O
SQLitePCL.Batteries_V2.Init()é necessário no construtor para iniciar o SQLite no iOS. - A função
OnConfiguringconfigura o local do banco de dados SQLite no dispositivo físico.
Criar, ler, atualizar & excluir
A seguir estão algumas instâncias no aplicativo em que o EF Core é usado para acessar o SQLite.
Ler
Retorne todos os registros.
A função
OnAppearingdeBlogsPage.xaml.csretorna todos os registrosBloge os armazena em uma variávelList.using (var blogContext = new BloggingContext()) { var theBlogs = blogContext.Blogs.ToList(); }
Retornar registros específicos.
A função
OnAppearingdePostsPage.xaml.csretornaPostregistros que contêm umBlogIdespecífico.using (var blogContext = new BloggingContext()) { var postList = blogContext.Posts .Where(p => p.BlogId == BlogId) .ToList(); }
Criar
- Insira um novo registo.
A função
Save_ClickeddoAddBlogPage.xaml.csinsere um novo objetoBlogno banco de dados SQLite.var blog = new Blog { Url = blogUrl.Text }; using (var blogContext = new BloggingContext()) { blogContext.Add(blog); await blogContext.SaveChangesAsync(); }
Atualizar
- Atualizar um registro existente.
A função
Save_ClickeddoAddPostPage.xaml.csatualiza um objetoBlogexistente com um novoPost.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(); }
Suprimir
- Elimine todos os registos com eliminação em cascata para registos filhos.
A função
DeleteAll_ClickeddoBlogsPage.xaml.cselimina todos os registosBlogno banco de dados SQLite e propaga as eliminações para todos os registosBlogfilhosPost.using (var blogContext = new BloggingContext()) { blogContext.RemoveRange(blogContext.Blogs); await blogContext.SaveChangesAsync(); }
Próximos passos
Nesta introdução, você aprendeu como usar um aplicativo Xamarin.Forms para acessar um banco de dados SQLite usando o Entity Framework Core.