.NET開発者のためのブログメディア
C#でDB操作するならEntityFrameworkがおすすめ!
- SE
- EntityFrameworkについて詳しく教えていただけませんか。
- PM
- ntityFrameworkは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形式のアプリケーションの作り方を参考にすると良いでしょう。
- SE
- C#でデータベースにアクセスしたり、データベースに追加、更新、削除を行う方法がよくわかりました。
- PM
- ご紹介したとおり、EntityFrameworkはデータベースの操作のためのフレームワークで、シンプルに開発できるようになりますので、ぜひ利用してみてください。
まとめ
EntityFrameworkはデータベースの操作のためのフレームワークです。データベース操作をSQL文を書くことなくC#のみで書く事ができるのでシンプルに開発をする事が可能になります。
データベース操作には不可欠なモデルの制作とその操作が単純に記述できるためデータベースに慣れていない開発者の方にもおすすめです。
C#でデータベースアプリケーションを開発する際はぜひ利用を検討してみてください。
Search キーワード検索
Popular 人気の記事
-
.NET Framework 3.5をWindows10にインストールする方法
2019年10月24日 -
EdgeとChromeはどう違う?それぞれのスペック7つを比較解説!
2020年09月28日 -
【VB.NET入門】DataGridViewの使い方まとめ
2019年12月22日 -
VB.NETをおすすめする3つの理由とは?VBAとの違いや勉強方法を解説
2019年12月21日 -
Windows10のテキストエディタおすすめ20選!選ぶポイント3つ
2020年04月28日
reccomended おすすめ記事
-
C#のusingステートメントでリソースの解放【Disposeとの違いとは】
2020年03月17日 -
【SQL Serverログの操作】トランザクションログの使用量を確認する方法
2020年03月16日 -
【.NETが統合】.NET 5の概要と今後のリリース予定
2020年03月05日
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
OutSystemsでの運用、開発/東京都品川区/【WEB面談可】/リモートワーク
月給55万~55万円東京都品川区(大崎駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/リモートワーク
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/リモートワーク
月給41万~50万円神奈川県横浜市(桜木町駅) -
防犯カメラ映像の監視システム設計、開発/神奈川県横浜市/【WEB面談可】/フルリモート
月給67万~67万円神奈川県横浜市(みなとみらい駅) -
製造業の作図システム開発/東京都千代田区/【WEB面談可】/リモートワーク
月給50万~50万円東京都千代田区(岩本町駅)