こんにちは。エンジニアの藤原です。
この記事では、.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クラスに接続先の設定をしましょう
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);
}
}
ここまでで以下のような流れになります
DBのテーブルにアクセスしたい
↓
同じ型となるモデルを作成
↓
DbSetという型のプロパティを介してアクセスする
DBからデータの取得
それでは最後にDBからデータを取得しましょう。
今回は Windows Form にボタンを1つだけ配置して、押されたらデータベースから
データを取得することで確認します。
ボタンを配置したらクリックイベント内でデータを取得しましょう!
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 の一部に過ぎませんが、初学者の方や困っている方の助けに少しでもなれたら幸いです。
ここまで読んでくださってありがとうございました!
以上、藤原でした。