Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

ASP.NET Core 2.0からデータベースアクセスをしよう

進化した「ASP.NET Core 2.0」新しいWeb開発手法を学ぶ 第5回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2018/03/22 14:00

 Entity Frameworkは.NET環境で使用することのできるデータベースアクセスのフレームワークです。そのEntity Frameworkのクロスプラットーム版であるEntity Framework Coreの最新バージョンである2.0が、ASP.NET Core 2.0と同じタイミングでリリースされました。今回と次回にわたって、ASP.NET Core 2.0からデータベースアクセスするアプリケーションを作成していきます。その過程でEntity Framework Core 2.0の使い方と新機能の確認をしていきます。

目次

対象読者

  • 新しいASP.NET Coreの機能について知りたい方
  • MacやLinuxなどでASP.NET Coreアプリケーションを動かしたい方
  • Entity Framework Coreの新機能について知りたい方

検証環境

 本稿では、以下の環境で動作を確認しています。

  • macOS Sierra 10.12.6
  • .NET Core 2.0

Entity Framework Coreとは

 まず、Entity Frameworkについて説明します。Entity Frameworkは.NET Frameworkランタイム上で使用することができるデータアクセスライブラリです。Entity FrameworkはRDBへのデータアクセスを行い、結果をオブジェクトにマッピングするいわゆるORM(Object/Relation Mapping)フレームワークに位置づけられます。2008年に最初のバージョンが公開されてから.NET Frameworkの進化とともに機能や性能が洗練されてきました。

 Entity FrameworkはORMとしての機能以外にも、既存のデータベース情報をもとにエンティティオブジェクトを自動生成したり、反対にエンティティオブジェクトからデータベースのテーブルを作成したりするマイグレーションの機能も備えています。なお、これらの自動生成機能は前者がデータベースファースト(あるいはモデルファースト)、後者がコードファーストと一般的に呼ばれています。

 このEntity Frameworkのクロスプラットフォーム版にあたるのが、Entity Framework Coreです。

Entity Framework Core 2.0とは

 前述の通り、Entity Framework Coreはさまざまなプラットフォームで稼働できるEntity Frameworkです。Entity Frameworkが.NET Framework上でのみ動作するのに対し、Entity Framework Coreは、.NET Core、.NET Framework、Mono、Xamarin、UWP(Universal Windows Platform)で動作させることができます。そのため、コードの移植が容易である、ASP.NET Coreと同様の特徴を持っています。

 以下は、Entity Framework Core 2.0のリリースアナウンスで紹介されている2.0の新機能です。

  • LINQでのLikeオペレータの使用
  • SQL文での文字列補完
  • テーブル分割
  • グローバルクエリフィルタ
  • DBコンテキストのプール

 これらの機能については次回、実装を通して詳細を確認していきます。

Entity Framework Core 2.0を使ってデータベースアクセスするアプリを作ろう(データベースのセットアップ編)

 ここからは実際にEntity Framework Core 2.0を使ってデータベースへアクセスするアプリケーションを作成していきます。RDBMSにはSQL Server 2017を使用しますが、macOSやLinuxでも動作できるように今回はDocker上でSQL Serverを起動する方法で説明をしていきます。

 Dockerが未インストールの場合は公式サイトから対応するプラットフォームのものをインストールしてください。

SQL Server 2017のセットアップ

 Docker上で稼働させることのできるSQL Server 2017がMicrosoftより提供されているため、こちらを使用してSQL Serverをセットアップしていきます。

 セットアップはコマンドラインでリスト1のdockerコマンド1行を実行するだけで完了します。

リスト1 SQL Server 2017のイメージを使ってDockerコンテナを起動する
$ docker run -d --name mssqlserver -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=P@ssw0rd' -e 'MSSQL_PID=Developer' -e 'MSSQL_LCID=1041' -p 1433:1433 microsoft/mssql-server-linux:2017-latest

 「docker run」コマンドは新たにDockerコンテナを新規作成・起動するためのコマンドです。コマンド末尾の「microsoft/mssql-server-linux:2017-latest」がコンテナのイメージを指定している部分で、Dockerの公式リポジトリからSQL Server 2017のイメージをダウンロードしています。

 そのほか、いくつか指定しているオプションの意味については以下の表を参照してください。

dockerコマンドのオプション
オプション 説明
-d dockerプロセスをバックグラウンドで実行
--name dockerコンテナの名前を指定
-e 'ACCEPT_EULA=Y' SQL Serverの利用規約に同意する
-e 'SA_PASSWORD=' SQL Serverのパスワード
-e 'MSSQL_PID=Developer' SQL Serverのエディションの設定
-e 'MSSQL_LCID=1041' SQL Serverのロケールの設定。1041は日本語ロケール
-p 1433:1433 dockerを起動しているマシンとdocker内でのポートのひも付け(ポートフォワーディング)

 オプションのうち、--nameオプションを使って指定したコンテナの名称は、コンテナの停止や再度コンテナを起動する際に使用することができます。

リスト2 Dockerコンテナの停止と2回目以降の起動
# コンテナの停止
$ docker stop mssqlserver

# コンテナの起動(2回目以降)
$ docker start mssqlserver

sqlcmdコマンドラインツールのインストール

 次は、WindowsとmacOSのコマンドラインからSQLを実行することができるsqlcmdユーティリティをインストールします。こちらのインストールは必須ではないため、他にSQL Serverに接続できるクライアントアプリケーションをお持ちの場合はスキップしても構いません。

 Windowsの場合は、インストーラをダウンロードしてセットアップをしてください。macOSの場合は、Homebrewを使ってsqlcmdをインストールすることができます。リスト3は、Homebrewでのインストール手順です。

リスト3 sqlcmdのインストール(macOS版)
$ brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
$ brew update
$ ACCEPT_EULA=y brew install --no-sandbox msodbcsql mssql-tools

データベース、テーブルの作成

 続いてデータベースとテーブルを作成します。今回はデータベース名を「efcore2」とし、「blog(ブログ)」と「post(ブログの記事)」という2つのテーブルを作成します。

 sqlcmdを使いCREATE DATABASE文を発行します。

リスト4 efcore2データベースの作成
$ sqlcmd -S localhost -U SA -P 'P@ssw0rd' -Q "CREATE DATABASE efcore2"

 sqlcmdのオプションですが、「-S」はサーバ名、「-U」はサーバのログインID、「-P」はパスワードです。

 サーバ名はlocalhostを指定します。DockerはあくまでOSのプロセスのひとつにすぎないため、localhostで接続することができます。サーバ名のSAはSQL Serverの管理者アカウント名です。パスワードはDockerコンテナ作成時に設定したものを使用します。

 テーブルも同様にsqlcmdからCREATE TABLE文で作成します。

リスト5 テーブルの作成
# blogテーブルの作成
$ sqlcmd -S localhost -U SA -P 'P@ssw0rd' -Q "CREATE TABLE efcore2.dbo.blog\
(\
    blog_id CHAR(5) PRIMARY KEY NOT NULL,\
    blog_title NVARCHAR(128),\
    author NVARCHAR(128),\
    delete_flg BIT\
);"

# postテーブルの作成
$ sqlcmd -S localhost -U SA -P 'P@ssw0rd' -Q "CREATE TABLE efcore2.dbo.post\
(\
    post_id CHAR(5) PRIMARY KEY NOT NULL,\
    blog_id CHAR(5),\
    post_title NVARCHAR(128),\
    post_detail NVARCHAR(256),\
    created_date DATETIME,\
    delete_flg BIT,\
    CONSTRAINT post_blog_fk FOREIGN KEY (blog_id) REFERENCES blog (blog_id)\
);"

 データベースのセットアップの最後に、blogテーブルとpostテーブルへデータ登録を行います。

リスト6 テーブルへのデータ登録
# blogテーブルへのデータ登録
$ sqlcmd -S localhost -U SA -P 'P@ssw0rd' -Q "\
INSERT INTO efcore2.dbo.blog (blog_id, blog_title, author, delete_flg) VALUES ('10000', 'ASP.NET Core 2.0を学ぶ', 'akiba', 0);\
INSERT INTO efcore2.dbo.blog (blog_id, blog_title, author, delete_flg) VALUES ('20000', 'EntityFramework Core 2.0のいろは', 'yamada', 0);\
INSERT INTO efcore2.dbo.blog (blog_id, blog_title, author, delete_flg) VALUES ('99999', 'ASP.NET Core 1.0について', 'akiba', 1);\
"

# postテーブルへのデータ登録
$ sqlcmd -S localhost -U SA -P 'P@ssw0rd' -Q "\
INSERT INTO efcore2.dbo.post (post_id, blog_id, post_title, post_detail, created_date, delete_flg) VALUES ('10001', '10000', 'Razor Pagesを知る', 'Razor PagesはASP.NET Core 2.0から導入された新機能です。ページコーディングの多いアプリケーションで重用されるように設計されており...', '2018-01-01 00:00:00.000', 0);\
INSERT INTO efcore2.dbo.post (post_id, blog_id, post_title, post_detail, created_date, delete_flg) VALUES ('10002', '10000', 'SPAテンプレートを使ってみる', 'ASP.NET CoreではView層にSPA(Single Page Application)を実現するJavaScriptフレームワークを使い、Webアプリケーションを作成することもできます...', '2018-01-01 00:00:00.000', 0);\
INSERT INTO efcore2.dbo.post (post_id, blog_id, post_title, post_detail, created_date, delete_flg) VALUES ('20001', '20000', 'EntityFramework Core 2.0の概要', 'Entity Frameworkは.NET環境で使用することのできるデータベースアクセスのフレームワークです。そのEntity Frameworkのクロスプラットーム版である...', '2018-01-01 00:00:00.000', 0);\
"

 以上でデータベースのセットアップは完了です。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 秋葉 龍一(アキバ リュウイチ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:進化した「ASP.NET Core 2.0」新しいWeb開発手法を学ぶ
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5