0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Entity Framework CoreでSQL Serverに接続する【実践編②】

Last updated at Posted at 2025-01-30

こんにちは。エンジニアの藤原です。

この記事では、.NET Webアプリケーション開発でDBフレームワークである EntityFrameWorkCore(以下、EFCoreと記載)について取り上げています。

今回は実践編②ということで実際にEFCoreを介してDBからデータを取得します。

注意
本記事は事前準備とContextクラスの作成が完了している方向けに作成しています。
まだの方はこちらの記事を参考にしてください。

・Entity Framework CoreでSQL Serverに接続する【準備編】
https://qiita.com/pesysyon/items/54b51c70a31a41eef035

・Entity Framework CoreでSQL Serverに接続する【実践編①】
https://qiita.com/pesysyon/items/457e884917ce41f53e69

目次

・DBContextクラスとは
・接続先の設定
・モデルの作成
・プロパティの作成
・DBからデータの取得
・最後に

DBContext クラスとは

前回の記事でも記載しましたが、改めて「DBContext」とは何なのか・・

DBコンテキストクラスとは、一言でいうと「データベースとのやり取りを管理する中心的な役割を果たすクラス」と言えます。
このクラスでデータベース接続を管理するので、EFCoreにおいて欠かせない重要な役割を担っているわけです。
その他にも「エンティティとDBのマッピング」「クエリの実行と追跡」「トランザクションの管理」など大切な幾つかの役割を担います。

より詳しく知りたい方は公式ページを読んでみることが良いと思います。
Entity Framework Core Microsoft公式ページ

接続先の設定

「さっさとデータを取得したい!」という気持ちを抑えつつ、、
まずは前回作成したDBContextクラスに接続先の設定をしましょう:keyboard:

namespace TestProject.Test
{
    internal class TestDbContext:DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            // 接続文字列を作成
            var builder = new SqlConnectionStringBuilder();
            builder.DataSource = @"(localdb)\\MSSQLLocalDB";
            
            // DB名
            builder.InitialCatalog = "TestDB";
            // 今回はWindows認証を使用
            builder.IntegratedSecurity = true;

            // SQL Server を使用
            optionsBuilder.UseSqlServer(builder.ConnectionString);
        }
    }
}

DBと接続するためには「接続文字列」が必要です。
SqlConnectionStringBuilder インスタンスを生成してオプションで設定していきます。

上画像の通りに接続文字列(今回はローカルDB)・DB名・認証方法・使用するDBを指定します。

モデルの作成

続いて、データベースとアプリケーションコードをつなぐ マッピング(ORM)を行うために、
Modelクラス(エンティティクラス)を作成します。

作成したModelクラスがデータベースのテーブルとコードの橋渡しをしてくれます。

注意
本来であればModelクラスは別ファイルに定義することが多いですが、
今回はこのまま同ファイルに定義しています。

public class Member
{
    public int MemberID { get; set; }

    public string MemberName { get; set; } = string.Empty;

    public string MemberAddress { get; set; } = string.Empty;
}

ご自身が作成されたテーブル定義に合わせて設定してください。

プロパティの作成

ここまで出来たら DbSet という型のプロパティを DbContext クラスに定義していきます。

DbSet のプロパティが DbContext クラスに必要な理由としては、Entity Framework Core(EF Core)を通じてデータベースの特定のテーブルにアクセスし、データの取得・追加・更新・削除を行うためです。

internal class TestDbContext:DbContext
{
    // 追加
    public DbSet<Member> Member { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // 接続文字列を作成
        var builder = new SqlConnectionStringBuilder();
        builder.DataSource = @"(localdb)\\MSSQLLocalDB";
        
        // DB名
        builder.InitialCatalog = "TestDB";
        // 今回はWindows認証を使用
        builder.IntegratedSecurity = true;

        // SQL Server を使用
        optionsBuilder.UseSqlServer(builder.ConnectionString);
    }
}

ここまでで以下のような流れになります:pencil2:

DBのテーブルにアクセスしたい

同じ型となるモデルを作成

DbSetという型のプロパティを介してアクセスする

DBからデータの取得

それでは最後にDBからデータを取得しましょう。

今回は Windows Form にボタンを1つだけ配置して、押されたらデータベースから
データを取得することで確認します。

ボタンを配置したらクリックイベント内でデータを取得しましょう!

image.png

C# のLinqを使用してシンプルにデータを取得します。
(めちゃくちゃシンプル...)
ここで先ほど作成したModelクラスを指定します。

private void button1_Click(object sender, EventArgs e)
{
    using (var context = new TestDbContext())
    {
        List<Member> list = context.Member.ToList();
    }
}

最後に

いかがだったでしょうか。
EFCore を介すことで、予想よりはるかに簡単にDBとコードを橋渡しできます。
今回ご紹介したものは EFCore の一部に過ぎませんが、初学者の方や困っている方の助けに少しでもなれたら幸いです。
ここまで読んでくださってありがとうございました!

以上、藤原でした。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?