C#でDB操作するならEntityFrameworkがおすすめ!
- システム
エンジニア - EntityFrameworkについて詳しく教えていただけませんか。
- プロジェクト
マネージャー - EntityFrameworkはC#でデータベース処理を行うことに適したフレームワークです。ではモデルの制作とデータベースの追加、更新、削除について説明いたしましょう。
EntityFrameworkとは?
EntityFrameworkはデータベースの操作に適したフレームワークです。Ruby on Railsで言えばActiveRecordのようなものです。
従来のADO.NETはSQL文やデータベース接続のための文字列を直接書かなければなりませんでしたが、EntityFrameworkであればSQL文を書く必要がなく、短いコードでC#のみでプログラミングすることができます。
データ量が多ければ従来のADO.NETより若干処理速度は遅くなりますが、高度な保守性を保つので開発や運用に最適な選択です。
コードファーストで開発ができるためデータベースが変更されても対応しやすい事も利点です。
EntityFrameworkとは?
EntityFramework とはADO.NETの機能のひとつです。
概念アプリケーションモデル(Entity Data Model (EDM))に対してプログラムを書くのでアプリケーションの境界を超えてC#のみでプログラミングを書き進める事ができます。
最新のものではEntityFramework CoreとEntityFramework 6があります。開発はCoreを重点的に進められていますが、6つの機能のうちの幾つかはまだ移行が終わっていません。
EntityFramework Coreとは?
EntityFramework Coreは、最新の.NET用のオブジェクトデータベースマッパーです。データベースを検索するLINQ クエリ、変更履歴を監視し変更を追跡するシステム、WEBなどからの更新操作要求、構造を管理するスキーマの移行がサポートされています。
EntityFramework CoreはMySQL、PostgreSQL、SQL Database(オンプレミスとAzure)、SQLite、Azure Cosmos DBなどの主要なデータベースにはだいたい対応しています。
EntityFramework 6とは?
EntityFramework 6はCoreの以前のバージョンでもともとは.NET Framework向けのオブジェクト リレーショナル マッパーですが、NET Coreもサポートしています。
現在はこれ以上の開発は積極的に行われていないようですが、幾らかの高機能なマッピング機能がEntityFramework Coreには含まれていません。
EntityFramework coreに移行するのは不可能な機能もあるため、開発状況によってはEntityFramework 6を使用するケースもあるでしょう。中にはCoreへの移行を検討するケースもあるようです。
EntityFrameworkでモデルを制作する方法
ここでいうモデルとはテーブルやエンティティ(実体)と呼ばれるものです。エンティティとは実体と訳され、テーブルも表として実体するような形です。両方ともモデルの要素と言えます。エンティティは単数、テーブルは複数といったイメージで覚えると良いでしょう。
違いはややこしいですが概念的なものであり実際にEntityFrameworkで操作する限りにおいては同じようなものになります。
要するに、データベースに格納する情報の要件を定義するためのものです。
例えば、中古車の在庫状況を格納するデータベースを作っていたとしたら、番号や値段や車種、仕入れた日時などを記録しておく必要があると頼まれるかも知れません。
この記録しなければいけない「値段や車種や購入番号」などのプロパティ情報の型、エンティティクラスを制作することができます。
この例で言えばC#で書くとこのようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
using System;
using System.Collections.Generic;
namespace UsedCar.Models
{
public class Car
{
//番号
public int ID { get; set; }
//メーカー
public string Maker { get; set; }
//車種
public string Model { get; set; }
//日付
public DateTime { get; set; }
//値段
public int Price { get; set; }
}
}
|
情報を格納するときは、このクラスのインスタンスを使います。こうしてテーブルにマッピングをすることができ、コードファーストで他の中古商品のエンティティを作ったり関連づけしてスキーマを作る事も可能です。
モデルの制作に関してはMicrosoft公式でサンプルデータが配布されているので、ここで確認してみても良いでしょう。
実際にC#でデータベースにアクセスする方法
エンティティを作成できたら実際にデータベースにアクセスする処理を書いてみましょう。
1
2
3
4
5
6
7
8
9
10
|
static void Main(string[] args)
{
using (var context = new DbContext())
{
var car = context.Car.Find(x => x.Maker == “BMW”);
var car = context.Car.Where(x => x.Price <=500000).ToArray();
}
}
|
ここではデータベース内を検索する命令をC#で記述しています。SQL文が不要でC#のみでコードを書く事ができるので従来よりコードが単純化しているのが特徴です。
探すだけではなく追加や削除も可能です。
C#でデータベースに追加、更新、削除を行う方法
次に追加や削除や更新を行ってみましょう。C#で新しくデータを追加する場合は以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
static void Main(string[] args)
{
using (var context = new DBContext())
{
// Addしただけではデータベースにはまだ追加されません
context.Car.Add(new Car
{
Maker =“HONDA”,
Price = 1000000,
});
// SaveChangesメソッドを呼び出すとデータベースに反映されるようになります
context.SaveChanges();
}
}
|
コード内にもコメントアウトで記述していますが、更新を反映するには SaveChangesメソッドを呼び出す必要があることに注意してください。
1
2
3
4
5
6
7
8
9
10
11
12
|
static void Main(string[] args)
{
using (var context = new DBContext())
{
//削除(ID指定)
var deleteTarget = new Car { Id = 35 };
context.Car.Attach(deleteTarget);
context.Car.Remove(deleteTarget);
context.SaveChanges();
}
}
|
IDがわからない場合はFindやwhereで探したものを削除、更新することもできます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
static void Main(string[] args)
{
using (var context = new DbContext())
{
var car01 = context.Car.Find(x => x.Maker == “SUZUKI”);
//削除
context.Car.Remove(car01);
var car02 = context.Car.Where(x => x.Price <= 5000000).ToArray();
// 更新
car02.Price = Array.ConvertAll(car02.Price, i => i *0.9);
// 削除や更新をするときはSaveChangesメソッドを忘れずに呼び出します。
context.SaveChanges();
}
}
|
以上のようなメソッドを使う事でSQL文を書く事なくC#で処理する事が可能です。
実際にアプリケーションを作る場合は直接メイン処理にデータベースを操作するような記述を書くよりはアプリケーション内で操作が行われたタイミングで特定処理やフィルタが動作するように書かれるケースが多いでしょう。
MVC自体を説明すると長くなってしまうのでここでは割愛しますが、Microsoft公式でサンプルデータが配布されているので、実際に確認してMVC形式のアプリケーションの作り方を参考にすると良いでしょう。
- システム
エンジニア - C#でデータベースにアクセスしたり、データベースに追加、更新、削除を行う方法がよくわかりました。
- プロジェクト
マネージャー - ご紹介したとおり、EntityFrameworkはデータベースの操作のためのフレームワークで、シンプルに開発できるようになりますので、ぜひ利用してみてください。
まとめ
EntityFrameworkはデータベースの操作のためのフレームワークです。データベース操作をSQL文を書くことなくC#のみで書く事ができるのでシンプルに開発をする事が可能になります。
データベース操作には不可欠なモデルの制作とその操作が単純に記述できるためデータベースに慣れていない開発者の方にもおすすめです。
C#でデータベースアプリケーションを開発する際はぜひ利用を検討してみてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)