Wprowadzenie do platformy Entity Framework Core
W tym samouczku utworzysz aplikację Xamarin.Forms, która uzyskuje dostęp do danych z bazy danych SQLite przy użyciu 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
Warunki wstępne
Zainstaluj jedną z poniższych opcji:
-
Visual Studio 2019 w wersji 16.3 lub nowszej z tym zestawem funkcji:
- tworzenie aplikacji mobilnych przy użyciu 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 rozwiązania EFGettingStarted.sln
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 dane i kliknij 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 bloga na liście i zobaczyć wszystkie wpisy dla tego bloga.
Kliknij 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 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 polecenie Usuń wszystkie 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 wyświetlania danych i nawigowania między stronami.
Ważny
Program Entity Framework Core używa refleksji do wywoływania funkcji, które linker Xamarin.iOS może usunąć w konfiguracjach trybu wydania. Można tego uniknąć na jeden z dwóch sposobów.
- Pierwszym z nich jest dodanie
--linkskip System.Core
do dodatkowych argumentów mtouch w opcjach kompilacji systemu iOS. - Alternatywnie ustaw zachowanie konsolidatora Xamarin.iOS na
Don't Link
w opcjach kompilacji systemu iOS. W tym artykule wyjaśniono więcej na temat konsolidatora 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 wykorzystano dostawcę 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órej uzyskuje się dostęp za pomocą 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
aPost
.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
dla instancjiPost
.
Kontekst danych
Klasa BloggingContext
znajduje się w folderze Services
i dziedziczy z klasy DbContext
platformy EF Core.
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. -
SQLitePCL.Batteries_V2.Init()
jest potrzebny w konstruktorze do zainicjowania SQLite w systemie iOS. - Funkcja
OnConfiguring
konfiguruje lokalizację bazy danych SQLite na urządzeniu fizycznym.
Tworzenie, odczytywanie, aktualizowanie & 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.
Czytaj
Zwróć wszystkie rekordy.
Funkcja
OnAppearing
BlogsPage.xaml.cs
zwraca wszystkie rekordyBlog
i zapisuje je w zmiennejList
.using (var blogContext = new BloggingContext()) { var theBlogs = blogContext.Blogs.ToList(); }
Zwrot określonych rekordów.
Funkcja
OnAppearing
PostsPage.xaml.cs
zwraca rekordyPost
zawierające określoneBlogId
.using (var blogContext = new BloggingContext()) { var postList = blogContext.Posts .Where(p => p.BlogId == BlogId) .ToList(); }
Utwórz
- Wstaw nowy rekord.
Funkcja
Save_Clicked
AddBlogPage.xaml.cs
wstawia nowy obiektBlog
do bazy danych SQLite.var blog = new Blog { Url = blogUrl.Text }; using (var blogContext = new BloggingContext()) { blogContext.Add(blog); await blogContext.SaveChangesAsync(); }
Aktualizacja
- Aktualizowanie istniejącego rekordu.
Funkcja
Save_Clicked
zAddPostPage.xaml.cs
aktualizuje istniejący obiektBlog
, używając nowegoPost
.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(); }
Usunąć
- Usuń wszystkie rekordy z kaskadą do rekordów podrzędnych.
Funkcja
DeleteAll_Clicked
zBlogsPage.xaml.cs
usuwa wszystkie rekordyBlog
w bazie danych SQLite i kaskadowo usuwa wszystkie rekordyBlog
podrzędnePost
.using (var blogContext = new BloggingContext()) { blogContext.RemoveRange(blogContext.Blogs); await blogContext.SaveChangesAsync(); }
Następne kroki
W tej instrukcji dowiedzieliście się, jak używać aplikacji Xamarin.Forms do uzyskiwania dostępu do bazy danych SQLite za pomocą Entity Framework Core.