В предыдущих темах мы рассмотрели процесс работы с базой данных SQLite, которая создается при первом запуске приложения. Теперь рассмотрим ситуацию, если у нас уже есть некоторая база данных, в которой имеются начальные данные, и нам эту базу данных надо подключить к проекту.
Продолжим работу с проектом из прошлой темы и вначале создадим саму базу данных SQLite. Для этого воспользуемся специальной программой Sqlitebrowser, которая предоставляет графический интерфейс для работы с базой данных SQLite. Эту программу можно найти по адресу http://sqlitebrowser.org.
После установки Sqlitebrowser откроем его и нажмем в меню на кнопку New Database:
Определим для базы данных место и имя. Пусть она будет называться phones.db.
После этого Sqlitebrowser открывает новую базу данных. В ней еще ничего нет, никаких таблиц. Поэтому перейдем на вкладку Execute SQL и введем на ней в поле ввода следующие sql-выражения:
CREATE TABLE Phones( Id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, Title TEXT, Price INTEGER, CompanyId INTEGER, FOREIGN KEY(CompanyId) REFERENCES Company(Id) ON DELETE CASCADE ); CREATE TABLE Companies( Id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, Name TEXT );
Эти sql-выражения позволят создать две таблицы: Company и Phone, которые будут связаны внешним ключом.
После ввода sql-выражений нажмем на панели на кнопку "Execute" или на клавишу F5 на клавиатуре, чтобы выполнить sql-выражения. И после этого будут созданы необходимые таблицы. Выберем таблицу Company и добавим в нее какие-нибудь данные:
Также добавим начальные данные и в таблицу Phone:
Итак, база данных у нас уже имеется. Теперь добавим ее в проект и установим у нее в панели свойств для параметра Build Action значение Content:
Теперь изменим класс контекста данных MobileContext, чтобы он использовал эту бд:
public class MobileContext : DbContext { public DbSet<Company> Companies { get; set; } public DbSet<Phone> Phones { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Filename=phones.db"); } }
База данных будет устанавливаться вместе с приложением в папку . Однако базы данных приложение берет из папки ApplicationData.Current.LocalFolder. Поэтому при первом запуске приложения нам надо выполнить копирование базы данных в ApplicationData.Current.LocalFolder. Для этого изменим класс App:
using System; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; using Windows.Storage; sealed partial class App : Application { public App() { this.InitializeComponent(); this.Suspending += OnSuspending; } protected override async void OnLaunched(LaunchActivatedEventArgs e) { if(await ApplicationData.Current.LocalFolder.TryGetItemAsync("phones.db")==null) { StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync("phones.db"); await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder); } //.... остальное содержимое метода OnLaunched } //.... остальное содержимое класса App }
Весь остальной код с прошлой темы можно не изменять. И при запуске приложения мы увидим на главной странице наши начальные данные: