記事内に広告が含まれています

【C#】Entity Framework Coreを使ってSQLiteを操作する

C#

Entity Framework Core (EF Core) を使って、SQLiteからデータを取得したり更新する方法を解説します。

(参考)EF Coreを使わずにデータを取得する方法についてはこちら

SQLiteはインストール不要なので、EF Coreを手軽に試してみたい場合に最適です。

下記公式ドキュメントを参考にしています。

概要 - EF Core
Entity Framework Core の概要チュートリアル

環境

  • Visual Studio 2022
  • .NET 8

プロジェクトの作成

Visual Studioで新しいプロジェクトを作成します。今回はコンソールアプリを使って説明します。

Entity Framework Core パッケージのインストール

EF CoreでSQLiteに接続するために、「Microsoft.EntityFrameworkCore.Sqlite」というパッケージをインストールします。

プロジェクト名を右クリックして「NuGetパッケージの管理」をクリックしてください。

「参照」タブで「Microsoft.EntityFrameworkCore.Sqlite」と検索し、表示されたパッケージ(末尾にCoreが付かない方)をインストールします。
※パッケージのバージョンは .NETのバージョンに合わせるようにしてください。
(例) .NET 6ならバージョン6系の最新版をインストールする

また、後のマイグレーションに必要な「Microsoft.EntityFrameworkCore.Tools」も同様の手順でインストールしておきます。

モデルクラスとコンテキストクラスの用意

Microsoftのドキュメントを参考に、ブログ記事を管理する簡単なアプリケーションを作成します。

プロジェクト名を右クリック→「追加」→「クラス」 で、以下の3つのクラスを作成してください。

それぞれのクラスの中身を書き換えます。

まずBlogクラスです。ブログデータを保持するテーブルのモデルクラスで、ブログのID(主キー)とURL、記事の内容が格納されます。

namespace SQLiteCrudSample
{
    internal class Blog
    {
        public int BlogId { get; set; }
        public string? Url { get; set; }
        public List<Post> Posts { get; } = new();
    }
}

次にPostクラスです。こちらは投稿内容を保持するテーブルのモデルクラスで、記事のタイトル・内容・親となるブログのデータが格納されます。

namespace SQLiteCrudSample
{
    internal 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; }
    }
}

最後に2つのモデルクラスと、DBの橋渡しを行うコンテキストクラスを用意します。
SQLiteの場合は接続文字列ではなく、DBファイルが作成されるパスを直接指定します。

using Microsoft.EntityFrameworkCore;

namespace SQLiteCrudSample
{
    internal class BloggingContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }
        public string DbPath { get; }

        public BloggingContext()
        {
            // 特殊フォルダ(デスクトップ)の絶対パスを取得
            var path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

            // DBファイルの保存先とDBファイル名をDbPathに格納
            DbPath = $"{path}{Path.DirectorySeparatorChar}blogging.db";
        }

        // デスクトップ上にSQLiteのDBファイルが作成される
        protected override void OnConfiguring(DbContextOptionsBuilder options)
            => options.UseSqlite($"Data Source={DbPath}");
    }
}

今回はデスクトップ上に「Blogging.db」という名前でDBファイルが作成されるように設定しています。

デスクトップ以外にファイルが作成されるようにしたい場合は、下記ドキュメントを参考にEnvironment.SpecialFolderの値を変更してみてください。

Environment.SpecialFolder 列挙型 (System)
システムの特別なフォルダーへのディレクトリ パスを取得するために使用される列挙定数を指定します。

マイグレーション

マイグレーションを行うことで、作成した2つのデータモデルに合わせてデータベース(テーブル)が作成できます。

「ツール」→「NuGetパッケージマネージャー」→「パッケージマネージャーコンソール」でコンソールを開き、以下のコマンドを実行してみましょう。

Add-Migration InitialCreate
Update-Database

Add-Migrationコマンドで変更内容が記録されたマイグレーションファイルを作成し、Update-Databaseコマンドでマイグレーションファイルの内容をDBに反映させます。

Done.と表示されればマイグレーション成功です。

デスクトップ上にblogging.dbファイル(+関連ファイル)が作成されていることを確認してください。

CRUD操作の実装

それでは、作成されたDBに対してCRUD操作を行うためのプログラムを実装しましょう。

namespace SQLiteApp
{
    internal class Program
    {
        private static void Main()
        {
            using (var db = new BloggingContext())
            {
                // 登録
                db.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
                db.SaveChanges();

                // 読み取り
                var blog = db.Blogs.OrderBy(b => b.BlogId).First();
                Console.WriteLine($"ブログを新規登録しました! " + $"ブログID:{blog.BlogId}, ブログURL:{blog.Url}");

                // 更新
                blog.Url = "https://devblogs.microsoft.com/dotnet";
                blog.Posts.Add(new Post { Title = "Hello World", Content = "EF CoreとSQLite" });
                db.SaveChanges();
                Console.WriteLine($"ブログを更新しました! " + $"ブログID:{blog.BlogId}, ブログURL:{blog.Url}");
                Console.WriteLine($"投稿タイトル:{blog.Posts.First().Title}, " + $"投稿内容:{blog.Posts.First().Content}");

                // 削除
                Console.WriteLine("ブログを削除しました!");
                db.Remove(blog);
                db.SaveChanges();
            }
        }
    }
}

Ctrl+F5で実行すると、コンソール上に登録・更新内容が表示されます。

ぜひ登録内容などを色々変更して試してみてください。

なおSQLiteのテーブルの中身をGUIで確認したい場合は、DB Browser for SQLiteなどのツールを使用するといいでしょう。

DB Browser for SQLite

おすすめ書籍

秀和システム
¥3,520 (2024/03/28 16:04時点 | Amazon調べ)

コメント

  1. より:

    助けになりました!

タイトルとURLをコピーしました