Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.Coredo dodatkowych argumentów mtouch w opcjach kompilacji systemu iOS. - Alternatywnie ustaw zachowanie konsolidatora Xamarin.iOS na
Don't Linkw 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ść
Postsdefiniuje relację nadrzędny-podrzędny międzyBlogaPost.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
BlogIdiBlogodnoszą się z powrotem do obiektu nadrzędnegoBlogdla 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
DbSetsą 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
OnConfiguringkonfiguruje 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
OnAppearingBlogsPage.xaml.cszwraca wszystkie rekordyBlogi zapisuje je w zmiennejList.using (var blogContext = new BloggingContext()) { var theBlogs = blogContext.Blogs.ToList(); }
Zwrot określonych rekordów.
Funkcja
OnAppearingPostsPage.xaml.cszwraca rekordyPostzawierają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_ClickedAddBlogPage.xaml.cswstawia nowy obiektBlogdo 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_ClickedzAddPostPage.xaml.csaktualizuje 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_ClickedzBlogsPage.xaml.csusuwa wszystkie rekordyBlogw bazie danych SQLite i kaskadowo usuwa wszystkie rekordyBlogpodrzę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.