UWP SQLite を EntityFramework Core から利用する

UWPでアプリケーションを作りたいので、ざっと、Microsoftのオンライン資料に目を通した

今回Microsoftは、今までになく、UWPに本気なんじゃないかと思えるくらい、今までの資料よりサイトが見やすくなっているように思う。私感ですが。

アプリケーションといえば、まずデータ回り。データオリエンテッド世代なので、以下のページをを見て試してみる。

https://docs.microsoft.com/ja-jp/windows/uwp/data-access/index

以下の構成を試すには、Visual Studio 2017 が前提のようだ。

UWPプロジェクトを新規作成して、以下に進む。

1.ライブラリのインストール

1.1 UniversalWindowsPlatformの更新

NuGetパッケージマネージャコンソールを起動 。以降でも使用する。

uwp_sqlite02

NETCore.UniversalWindowsPlatform の Version を 5.2.2 以上へ更新

  1. PM > Update-Package Microsoft.NETCore.UniversalWindowsPlatform Version 5.2.2

uwp_sqlite03

.NET Core って、.NET Framework?という方は、以下を一読

https://msdn.microsoft.com/ja-jp/library/dn878908(v=vs.110).aspx

1.2.Entity Frameworkのインストール

パッケージマネージャコンソールから、以下の2パッケージをインストール

  1. PM > Install-Package Microsoft.EntityFrameworkCore.Sqlite
  2.  
  3. PM> Install-Package Microsoft.EntityFrameworkCore.Tools

uwp_sqlite

2.モデルの作成

コンテキストとエンティティを定義。最低限!

WPFと、EF6では、App.configの設定がもう少し面倒だった気がするが、これだけ!?

  1. using Microsoft.EntityFrameworkCore;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace Zousho.Models
  9. {
  10. public class ZoushoContext: DbContext
  11. {
  12. public DbSet Books { get; set; }
  13. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  14. {
  15. optionsBuilder.UseSqlite("Data Source=zousho.db");
  16. }
  17. }
  18. public class Book
  19. {
  20. public int BookId { get; set; }
  21. public string isbn { get; set; }
  22. }
  23. }

3.データベースの作成

3.1 マイグレーション定義ファイルを作成

上記2.を記述することで、定義をマイグレーションしてデータベースを生成できる。

パッケージマネージャーコンソールから以下を実行

  1. Add-Migration {マイグレーション名}

マイグレーション用のソースコードが生成される

uwp_sqlite04

WPF + EF6 + SQLite では、コードファーストが実質使えなかった気がするので、これは期待。

3.2 マイグレーションを実行するコード

App.xaml.cs に以下を追記

EntityFrameworkCoreのimport

  1. using Microsoft.EntityFrameworkCore;

アプリケーション実行時にマイグレーションを実行するように記述

  1. public App()
  2. {
  3. this.InitializeComponent();
  4. this.Suspending += OnSuspending;
  5.  
  6. using(var db = new ZoushoContext())
  7. {
  8. db.Database.Migrate();
  9. }
  10. }

3.3 SQLite DBファイルの確認

ここで、いったんアプリケーションを起動させると、SQLiteのデータベースファイルが以下の場所に作成される。

{ユーザーディレクトリ}\AppData\Local\Packages\{パッケージID}\LocalState

パッケージIDは、Package.appxmanifest のパッケージ化タブ、パッケージ名で確認できる。

uwp_sqlite05

DB Browser for SQLite で開いたところ

uwp_sqlite06

__EFMigrationsHistory テーブルに、マイグレーションの実行履歴が格納されている。

uwp_sqlite07

4.アプリケーションに組み込む

値を入力して、Add ボタンを押すとDB登録して、一覧表示するというアプリを作成

4.1 MainPage.xaml

  1. <Page
  2. x:Class="Zousho.MainPage"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:local="using:Zousho"
  6. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  7. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  8. mc:Ignorable="d"
  9. Loaded="Page_Loaded">
  10.  
  11. <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
  12. <StackPanel>
  13. <TextBox Name="Isbn"></TextBox>
  14. <Button Click="Add_Book">Add</Button>
  15. <ListView Name="Books">
  16. <ListView.ItemTemplate>
  17. <DataTemplate>
  18. <TextBlock Text="{Binding isbn}"/>
  19. </DataTemplate>
  20. </ListView.ItemTemplate>
  21. </ListView>
  22. </StackPanel>
  23. </Grid>
  24. </Page>

4.2 MainPage.xaml.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Runtime.InteropServices.WindowsRuntime;
  6. using Windows.Foundation;
  7. using Windows.Foundation.Collections;
  8. using Windows.UI.Xaml;
  9. using Windows.UI.Xaml.Controls;
  10. using Windows.UI.Xaml.Controls.Primitives;
  11. using Windows.UI.Xaml.Data;
  12. using Windows.UI.Xaml.Input;
  13. using Windows.UI.Xaml.Media;
  14. using Windows.UI.Xaml.Navigation;
  15. using Zousho.Models;
  16.  
  17. namespace Zousho
  18. {
  19. public sealed partial class MainPage : Page
  20. {
  21. public MainPage()
  22. {
  23. this.InitializeComponent();
  24. }
  25.  
  26. private void Page_Loaded(object sender, RoutedEventArgs e)
  27. {
  28. using (var db = new ZoushoContext())
  29. {
  30. Books.ItemsSource = db.Books.ToList();
  31. }
  32. }
  33.  
  34. private void Add_Book(object sender, RoutedEventArgs e)
  35. {
  36. using (var db = new ZoushoContext())
  37. {
  38. var book = new Book { isbn = Isbn.Text };
  39. db.Books.Add(book);
  40. db.SaveChanges();
  41.  
  42. Books.ItemsSource = db.Books.ToList();
  43. }
  44. }
  45. }
  46. }

4.3 アプリケーションの実行

想定通りに動きました。めでたし。

UWPいい感じだ。

uwp_sqlite08

MSのサイトがよくまとまっているから、UWPについては書籍いらんかな~

Reactも並行して調べているのだけれど、JavaScript界隈は自由度が高すぎて混とんとしすぎていて、全体像がつかみにくい。しばらくぶりにJavaScript触る人には、この、Reactの本 は、今現在のフロントエンド開発のフレームが説明されているので、非常にわかりやすい良書!

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です