Wprowadzenie do programu EF Core i platformy Xamarin
W tym samouczku utworzysz aplikację platformy Xamarin.Forms , która wykonuje dostęp do danych względem bazy danych SQLite przy użyciu platformy Entity Framework Core.
Możesz skorzystać z samouczka przy użyciu programu Visual Studio w systemie Windows lub Visual Studio dla komputerów Mac.
Napiwek
Przykład z tego artykułu można zobaczyć w witrynie GitHub.
Wymagania wstępne
Zainstaluj jedną z poniższych czynności:
- Program Visual Studio 2019 w wersji 16.3 lub nowszej z tym obciążeniem:
- Programowanie aplikacji mobilnych za pomocą platformy .NET
- Visual Studio dla komputerów Mac
Ta dokumentacja zawiera szczegółowe instrukcje instalacji krok po kroku dla każdej platformy.
Pobieranie i uruchamianie przykładowego projektu
Aby uruchomić i eksplorować tę przykładową aplikację, pobierz kod w witrynie GitHub.
Po pobraniu otwórz plik EFGettingStarted.sln
rozwiązania w programie Visual Studio lub Visual Studio dla komputerów Mac i uruchom aplikację na wybranej platformie.
Po pierwszym uruchomieniu aplikacji zostanie wypełniona lokalna baza danych SQLite z dwoma wpisami reprezentującymi blogi.
Kliknij przycisk Dodaj na pasku narzędzi.
Zostanie wyświetlona nowa strona, która umożliwia wprowadzenie informacji o nowym blogu.
Wypełnij wszystkie informacje i kliknij pozycję Zapisz na pasku narzędzi. Nowy blog zostanie zapisany w bazie danych SQLite aplikacji i zostanie wyświetlony na liście.
Możesz kliknąć jeden z wpisów w blogu na liście i zobaczyć wpisy dla tego bloga.
Kliknij pozycję Dodaj na pasku narzędzi.
Zostanie wyświetlona strona umożliwiająca wypełnienie informacji o nowym wpisie w blogu.
Wypełnij wszystkie informacje i kliknij przycisk Zapisz na pasku narzędzi.
Nowy wpis zostanie skojarzony z wpisem w blogu klikniętym w poprzednim kroku i zapisze go w bazie danych SQLite aplikacji i zostanie wyświetlony na liście.
Wróć do strony listy blogów. Kliknij pozycję Usuń wszystko na pasku narzędzi. Wszystkie blogi i odpowiadające im wpisy zostaną usunięte z bazy danych SQLite aplikacji.
Eksplorowanie kodu
W poniższych sekcjach przedstawiono kod w przykładowym projekcie, który odczytuje, tworzy, aktualizuje i usuwa dane z bazy danych SQLite przy użyciu programu EF Core z platformą Xamarin.Forms.
Zakłada się, że znasz tematy platformy Xamarin.Forms dotyczące wyświetlania danych i nawigowania między stronami.
Ważne
Program Entity Framework Core używa odbicia do wywoływania funkcji, które konsolidator Xamarin.iOS może usuwać podczas konfigurowania trybu wydania . Można tego uniknąć na jeden z dwóch sposobów.
- Pierwszy polega na dodaniu
--linkskip System.Core
do dodatkowych argumentów mtouch w opcjach kompilacji systemu iOS. - Możesz też ustawić zachowanie konsolidatora Xamarin.iOS na
Don't Link
wartość w opcjach kompilacji systemu iOS. W tym artykule wyjaśniono więcej na temat konsolidatora platformy Xamarin.iOS, w tym sposobu ustawiania zachowania na platformie Xamarin.iOS. (Takie podejście nie jest idealne, ponieważ może to spowodować odrzucenie ze sklepu).
Pakiety NuGet programu Entity Framework Core
Aby utworzyć aplikacje platformy Xamarin.Forms za pomocą programu EF Core, należy zainstalować pakiet dla dostawców baz danych platformy EF Core, które mają być przeznaczone dla wszystkich projektów w rozwiązaniu Xamarin.Forms. W tym samouczku jest używany dostawca SQLite.
Poniższy pakiet NuGet jest wymagany w każdym z projektów w rozwiązaniu Xamarin.Forms.
Microsoft.EntityFrameworkCore.Sqlite
Klasy modelu
Każda tabela w bazie danych SQLite, do których uzyskuje dostęp za pośrednictwem programu EF Core, jest modelowana w klasie. W tym przykładzie są używane dwie klasy: Blog
i Post
które można znaleźć w folderze Models
.
Klasy modelu składają się tylko z właściwości, które modelują kolumny w bazie danych.
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>(); } }
Właściwość
Posts
definiuje relację nadrzędny-podrzędny międzyBlog
iPost
.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; } } }
Właściwości
BlogId
iBlog
odnoszą się z powrotem do obiektu nadrzędnegoBlog
Post
dla wystąpienia klasy .
Kontekst danych
Klasa BloggingContext
znajduje się w folderze Services
i dziedziczy z klasy EF Core DbContext
. Element A DbContext
służy do grupowania zapytań i zmian bazy danych.
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}");
}
}
}
- Obie właściwości w tej klasie typu
DbSet
są używane do obsługi bazowych tabel reprezentujących blogi i wpisy. - Element
SQLitePCL.Batteries_V2.Init()
jest wymagany w konstruktorze do zainicjowania sqlite w systemie iOS. - Funkcja
OnConfiguring
konfiguruje lokalizację bazy danych SQLite na urządzeniu fizycznym.
Tworzenie, odczytywanie, aktualizowanie i usuwanie
Poniżej przedstawiono niektóre wystąpienia w aplikacji, w których program EF Core jest używany do uzyskiwania dostępu do biblioteki SQLite.
Odczyt
- Zwróć wszystkie rekordy.
- Funkcja
OnAppearing
funkcji zwraca wszystkieBlog
rekordy i zapisuje je w zmiennejList
BlogsPage.xaml.cs
.
- Funkcja
using (var blogContext = new BloggingContext())
{
var theBlogs = blogContext.Blogs.ToList();
}
- Zwracanie określonych rekordów.
- Funkcja
OnAppearing
zwracaPost
rekordyPostsPage.xaml.cs
zawierające określonyBlogId
element .
- Funkcja
using (var blogContext = new BloggingContext())
{
var postList = blogContext.Posts
.Where(p => p.BlogId == BlogId)
.ToList();
}
Utworzenie
- Wstaw nowy rekord.
- Funkcja
Save_Clicked
AddBlogPage.xaml.cs
wstawia nowyBlog
obiekt do bazy danych SQLite.
- Funkcja
var blog = new Blog { Url = blogUrl.Text };
using (var blogContext = new BloggingContext())
{
blogContext.Add(blog);
await blogContext.SaveChangesAsync();
}
Zaktualizuj
- Aktualizowanie istniejącego rekordu.
- Funkcja
Save_Clicked
aktualizacji istniejącegoAddPostPage.xaml.cs
Blog
obiektu za pomocą nowegoPost
obiektu .
- Funkcja
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();
}
Delete
- Usuń wszystkie rekordy z kaskadą do rekordów podrzędnych.
- Funkcja
DeleteAll_Clicked
BlogsPage.xaml.cs
usuwa wszystkieBlog
rekordy w bazie danych SQLite i kaskadowo usuwa wszystkieBlog
rekordy podrzędnePost
.
- Funkcja
using (var blogContext = new BloggingContext())
{
blogContext.RemoveRange(blogContext.Blogs);
await blogContext.SaveChangesAsync();
}
Następne kroki
W tym rozpoczęciu przedstawiono sposób uzyskiwania dostępu do bazy danych SQLite przy użyciu aplikacji platformy Xamarin.Forms przy użyciu platformy Entity Framework Core.
Inne tematy dotyczące platformy Entity Framework Core dla deweloperów platformy Xamarin:
- Konfigurowanie
DbContext
- Dowiedz się więcej o wyrażeniach zapytań LINQ
- Konfigurowanie modelu w celu określenia elementów, takich jak wymagana i maksymalna długość