Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial, creará una aplicación de Xamarin.Forms que realiza el acceso a datos en una base de datos de SQLite mediante Entity Framework Core.
Puede seguir el tutorial mediante Visual Studio en Windows o Visual Studio para Mac.
Propina
Puede ver el ejemplo de de este artículo en GitHub.
Prerrequisitos
Instale uno de los siguientes:
-
visual Studio 2019, versión 16.3 o posterior, con esta carga de trabajo:
- desarrollo móvil de con .NET
- Visual Studio para Mac
Esta documentación de proporciona instrucciones detalladas de instalación paso a paso para cada plataforma.
Descarga y ejecución del proyecto de ejemplo
Para ejecutar y explorar esta aplicación de ejemplo, descargue el código en GitHub.
Una vez descargado, abra el archivo de solución EFGettingStarted.sln en Visual Studio o Visual Studio para Mac y ejecute la aplicación en la plataforma que prefiera.
Cuando se inicie la aplicación por primera vez, rellenará la base de datos local de SQLite con dos entradas que representan blogs.
Haga clic en el botón Agregar de la barra de herramientas.
Aparecerá una nueva página que le permite escribir información sobre un nuevo blog.
Rellene toda la información necesaria y haga clic en Guardar en la barra de herramientas. El nuevo blog se guardará en la base de datos sqLite de la aplicación y se mostrará en la lista.
Puede hacer clic en una de las entradas del blog de la lista y ver las entradas de ese blog.
Haga clic en Agregar en la barra de herramientas.
A continuación, aparece una página que le permite rellenar información sobre una nueva entrada de blog.
Rellene toda la información y haga clic en Guardar en la barra de herramientas.
La nueva entrada se asociará a la entrada de blog en la que ha clic en un paso anterior y se guardará en la base de datos sqLite de la aplicación y se mostrará en la lista.
Vuelva a la página de la lista de blog. Y haga clic en Eliminar todo en la barra de herramientas. Todos los blogs y sus publicaciones correspondientes se eliminarán de la base de datos SQLite de la aplicación.
Exploración del código
Las secciones siguientes le guiarán por el código del proyecto de ejemplo que lee, crea, actualiza y elimina datos de una base de datos de SQLite mediante EF Core con Xamarin.Forms.
Se supone que está familiarizado con los temas de Xamarin.Forms de mostrar datos y navegar entre páginas.
Importante
Entity Framework Core usa la reflexión para invocar funciones que el enlazador de Xamarin.iOS puede quitar mientras se encuentra en configuraciones del modo versión. Puede evitarlo de una de estas dos maneras.
- La primera consiste en agregar
--linkskip System.Corea los argumentos adicionales mtouch en las opciones de compilación de iOS . - También puede establecer el comportamiento del Enlazador de Xamarin.iOS a
Don't Linken las opciones de compilación de iOS . En este artículo se explica más sobre el enlazador de Xamarin.iOS, incluido cómo establecer el comportamiento en Xamarin.iOS. (Este enfoque no es ideal, ya que puede provocar el rechazo de la tienda).
Paquetes NuGet de Entity Framework Core
Para crear aplicaciones de Xamarin.Forms con EF Core, instale el paquete para los proveedores de bases de datos de EF Core que desea tener como destino en todos los proyectos de la solución de Xamarin.Forms. En este tutorial se usa el proveedor de SQLite.
El siguiente paquete NuGet es necesario en cada uno de los proyectos de la solución Xamarin.Forms.
Microsoft.EntityFrameworkCore.Sqlite
Clases de modelo
Cada tabla de la base de datos de SQLite a la que se accede a través de EF Core se modela en una clase . En este ejemplo, se usan dos clases: Blog y Post que se pueden encontrar en la carpeta Models.
Las clases de modelo se componen solo de propiedades, que modelan columnas de la base de datos.
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>(); } }La propiedad
Postsdefine una relación padre-hijo entreBlogyPost.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; } } }Las propiedades
BlogIdyBlogse relacionan con el objetoBlogprimario de la instancia dePost.
Contexto de datos
La clase BloggingContext se encuentra en la carpeta Services y hereda de la clase DbContext de EF Core. Un DbContext se usa para agrupar consultas y cambios de base de datos.
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 propiedades de esta clase de tipo
DbSetse usan para operar en las tablas subyacentes que representan blogs y publicaciones. - El
SQLitePCL.Batteries_V2.Init()es necesario en el constructor para iniciar SQLite en iOS. - La función
OnConfiguringconfigura la ubicación de la base de datos de SQLite en el dispositivo físico.
Crear, leer, actualizar & eliminar
A continuación se muestran algunas instancias de la aplicación donde se usa EF Core para acceder a SQLite.
Leer
Devuelve todos los registros.
La función
OnAppearingdeBlogsPage.xaml.csdevuelve todos los registrosBlogy los almacena en una variableList.using (var blogContext = new BloggingContext()) { var theBlogs = blogContext.Blogs.ToList(); }
Devuelve registros específicos.
La función
OnAppearingdePostsPage.xaml.csdevuelve registrosPostque contienen unBlogIdespecífico.using (var blogContext = new BloggingContext()) { var postList = blogContext.Posts .Where(p => p.BlogId == BlogId) .ToList(); }
Crear
- Inserte un nuevo registro.
La función
Save_ClickeddeAddBlogPage.xaml.csinserta un nuevo objetoBlogen la base de datos SQLite.var blog = new Blog { Url = blogUrl.Text }; using (var blogContext = new BloggingContext()) { blogContext.Add(blog); await blogContext.SaveChangesAsync(); }
Actualizar
- Actualice un registro existente.
La función
Save_ClickeddeAddPostPage.xaml.csactualiza un objeto deBlogexistente con un nuevoPost.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(); }
Borrar
- Elimine todos los registros con eliminación en cascada a los registros secundarios.
La función
DeleteAll_ClickeddeBlogsPage.xaml.cselimina todos los registros deBlogde la base de datos de SQLite y aplica en cascada las eliminaciones a todos los registrosPostsecundarios deBlog.using (var blogContext = new BloggingContext()) { blogContext.RemoveRange(blogContext.Blogs); await blogContext.SaveChangesAsync(); }
Pasos siguientes
En esta introducción ha aprendido a usar una aplicación de Xamarin.Forms para acceder a una base de datos de SQLite mediante Entity Framework Core.