読者です 読者をやめる 読者になる 読者になる

de:code 2015 レポート day2 - DEV-008

cw_owashi event

クロスワープの大鷲です。

de:code 2015 day2 のレポート、最後の記事をお届けします。

参加セッション

私が参加したセッションは以下の通りです。
本記事では、最終セッション「DEV-008 進化は止まらない! ADO.NET Entity Framework の今」のレポートをお届けします。

資料はこちらで公開されています。
その他のセッション動画及びスライド資料も Channel9 で公開されています。
オープニング キーノートは Microsoft Virtual Academy のサイトで公開されています。

day 1

CODE ROOM TITLE
SNR-004 Room G デジタルテクノロジーが推進する、アプリケーション革新
SPL-001 Room C マイクロソフトが考える 5 年後を見据えた技術提言
CHK-002 Chalk Talk クラウドアプリケーションのアーキテクチャ設計を深める
CHK-003 Chalk Talk プログラミング パラダイムの知識を深める
CDP-008 Room C MS版Docker 誕生! Windows Server Containers とは?

day 2

CODE ROOM TITLE
ARC-001 Room A クラウド時代のデータアーキテクチャ
SNR-009 Room B フルスタックエンジニアとか無理!
比べてわかったAzure PaaSの勘所
DEV-019 Room F 徹底解説! プログラマーがおさえておくべき
Azure Active Directory のすべて
PBS-001 Room E ここまでできる! Office 365 API を活用したアプリ開発
~ Office 365 内のデータ活用~
DEV-006 Room A ASP.NET 5 Web 開発 ~ ランタイム編 ~
DEV-007 Room A ASP.NET 5 Web 開発 ~ フレームワーク編 ~
DEV-008 Room A 進化は止まらない! ADO.NET Entity Framework の今

DEV-008 進化は止まらない! ADO.NET Entity Framework の今

スピーカーは日本マイクロソフトの井上 大輔さん。

最終セッションも Developer 向けのセッションです。
EntityFramework も ASP.NET とともにメジャーバージョンアップが予定されているので楽しみにしていたのですが、セッションは現行の EF6 に関する内容が中心で、やや狙いが外れた感じでした。
それから正直、このセッションはデモが失敗してばかりで、何をしたいのかよくわかりませんでした…。

EF6 に関しては特に目新しい話はありませんので割愛させて頂きます。

コード生成方法のガイドライン

EF6 はコード生成の方法として、edmx ファイルを使う方法と、Code First という方法をサポートしています。
また、どちらの方法に関しても、コードからデータベースを生成するという方向と、データベースからコードを生成するという方向をサポートしています。
この辺りのネーミングは歴史的事情があって、やや混乱していますが、整理すると以下のようになります。

  • edmx からデータベースを生成(Model First)
  • C# コードからデータベースを生成(Code First)
  • データベースから edmx を作成(Database First)
  • データベースから C# コードを生成(Database First の Code First)

最後の「Database First の Code First」はまったく Code「First」ではないのですが、「Code First」というのは「edmx からコードを生成するのではなく、edmx を使わずにいきなりコードを書く/生成する」という程度の意味です。

セッション中では、どの方法を使うかのガイドとして、以下のようなものを提唱していました。

  • 既にシステムにドメイン クラスが存在しているなら Code First
  • 既にデータベースが存在しているなら Database First(edmx を使うかどうかは好みで)
  • ドメイン駆動で開発したいなら Model First

最後の「ドメイン駆動で開発したいなら Model First」というのは、システムにはドメインクラスも RDB もない状態で新規に作る場合に、ドメインモデルと RDB のどちらを先に設計するかで決めるということだと思います。
ただ、このガイドはどうかと思います。
ドメインクラスがそのまま EF の Code First のクラスとして使えるかと言うと怪しいですし、新規のドメイン駆動開発で Code First を採用してももちろん構いません。
Code First が登場した当時は、edmx と Code First では全く異なるコードが生成されていたのですが、現在は edmx からでも Code First と同じコードが生成されるので、デザイナーを使うかどうかの好みの問題でしかありません。
また、セッション中では触れられていなかったのですが、次期バージョンである EF7 では、そもそも edmx デザイナーが削除されて、Code First のみになるようです。

Entity Framework 7

EF7 の大きな特徴の一つに、RDB だけでなく、いわゆる NoSQL データベースのサポートが追加されるという点が挙げられます。
ただし、予定はされているものの、現時点ではまだ実装されていないようです。

また、.NET Core 5 で動くようになるため、これまで使えなかった Windows Phone 等のデバイスでも利用できるようになるのは大きいと言えます。
生成される SQL の質がかなり改善されてシンプルになっているという利点もあります。

ただし、EF7 には最初は EF6 の全機能が搭載されるわけではなく、そのままアップグレードできるようにはなっていないという点には注意が必要です。