Обучение
Модуль
Узнайте, как добавить базу данных в приложение на основе минимальных API.
Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
В этом руководстве вы создадите приложение Xamarin.Forms, которое осуществляет доступ к базе данных SQLite с помощью Entity Framework Core.
Инструкции из этого руководства можно выполнять с помощью Visual Studio в Windows или Visual Studio для Mac.
Совет
Вы можете скачать используемый в этой статье пример из репозитория GitHub.
Установите одно из следующих приложений:
В этой документации содержатся подробные пошаговые инструкции по установке для каждой платформы.
Чтобы запустить и изучить этот пример приложения, скачайте код на сайте GitHub.
После скачивания откройте файл решения EFGettingStarted.sln
в Visual Studio или Visual Studio для Mac и запустите приложение на выбранной платформе.
При первом запуске приложения локальная база данных SQLite будет заполнена двумя записями, представляющими блоги.
На панели инструментов нажмите кнопку Add (Добавить).
Появится новая страница, на которой можно ввести сведения о новом блоге.
Введите все сведения и на панели инструментов нажмите кнопку Save (Сохранить). Новый блог сохранится в базе данных SQLite приложения и появится в списке.
Вы можете щелкнуть одну из записей блога в списке и просмотреть все записи в этом блоге.
На панели инструментов нажмите кнопку Add (Добавить).
Появится страница, на которой можно ввести сведения о новой записи блога.
Введите все сведения и на панели инструментов нажмите кнопку Save (Сохранить).
Новая запись будет связана с записью блога, которую вы выбрали на предыдущем шаге, сохранится в базе данных SQLite приложения и появится в списке.
Вернитесь на страницу со списком блогов. На панели инструментов нажмите кнопку Delete All (Удалить все). Все блоги и соответствующие записи будут удалены из базы данных SQLite приложения.
В следующих разделах последовательно разбирается код из образца проекта, который считывает, создает, обновляет и удаляет данные в базе данных SQLite с помощью EF Core с Xamarin.Forms.
Предполагается, что вы знаете как отображать данные и переходить между страницами с помощью Xamarin.Forms.
Важно!
Entity Framework Core применяет отражение для вызова функций, которые компоновщик Xamarin.iOS может исключить, если используются конфигурации режима Выпуск. Предотвратить это можно одним из двух способов.
--linkskip System.Core
в поле Дополнительные аргументы mtouch в параметрах сборки iOS.Don't Link
.
Дополнительные сведения о компоновщике Xamarin.iOS, включая настройку его поведения для Xamarin.iOS, приведены в этой статье. Такой подход не идеален, так как он может стать причиной отклонения в магазине.Чтобы создавать приложения Xamarin.Forms с помощью EF Core, установите пакеты целевых поставщиков базы данных EF Core, с которыми вы будете работать, во все проекты в решении Xamarin.Forms. В этом руководстве используется поставщик SQLite.
В каждом из проектов решения Xamarin.Forms требуется указанный ниже пакет NuGet.
Microsoft.EntityFrameworkCore.Sqlite
Каждая таблица в базе данных SQLite, доступ к которой осуществляется через EF Core, моделируется в классе. В этом примере используются два класса: Blog
и Post
. Они находятся в папке Models
.
Классы модели состоят только из свойств, которые моделируют столбцы в базе данных.
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>();
}
}
Свойство Posts
определяет связь "родитель-потомок" между Blog
и Post
.
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; }
}
}
Свойства BlogId
и Blog
определяют обратные связи с родительским объектом Blog
для экземпляра Post
.
Класс BloggingContext
находится в папке Services
и наследуется от класса EF Core DbContext
. DbContext
используется для группирования запросов к базе данных и изменений.
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}");
}
}
}
DbSet
служат для работы с базовыми таблицами, представляющими блоги и записи.SQLitePCL.Batteries_V2.Init()
требуется в конструкторе для инициации SQLite в iOS.OnConfiguring
задает расположение базы данных SQLite на физическом устройстве.Ниже приведены некоторые места в приложении, где EF Core используется для доступа к SQLite.
OnAppearing
в BlogsPage.xaml.cs
возвращает все записи Blog
и сохраняет их в переменной List
.using (var blogContext = new BloggingContext())
{
var theBlogs = blogContext.Blogs.ToList();
}
OnAppearing
в PostsPage.xaml.cs
возвращает записи Post
, содержащие определенное значение BlogId
.using (var blogContext = new BloggingContext())
{
var postList = blogContext.Posts
.Where(p => p.BlogId == BlogId)
.ToList();
}
Save_Clicked
в AddBlogPage.xaml.cs
вставляет новый объект Blog
в базу данных SQLite.var blog = new Blog { Url = blogUrl.Text };
using (var blogContext = new BloggingContext())
{
blogContext.Add(blog);
await blogContext.SaveChangesAsync();
}
Save_Clicked
в AddPostPage.xaml.cs
изменяет существующий объект Blog
, используя новый объект Post
.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();
}
DeleteAll_Clicked
в BlogsPage.xaml.cs
удаляет все записи Blog
в базе данных SQLite, распространяя удаление на все дочерние записи Post
объекта Blog
.using (var blogContext = new BloggingContext())
{
blogContext.RemoveRange(blogContext.Blogs);
await blogContext.SaveChangesAsync();
}
В этом кратком руководстве вы узнали, как использовать приложение Xamarin.Forms для доступа к базе данных SQLite с помощью Entity Framework Core.
Другие разделы по Entity Framework Core, которые могут представлять интерес для разработчиков Xamarin:
DbContext
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Обучение
Модуль
Узнайте, как добавить базу данных в приложение на основе минимальных API.