しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Channel 9 で公開されている Entity Framework 7 の機能を紹介する動画が面白い

Channel 9 エバンジェリストである Seth Juarez 氏が、Entity Framework プログラムマネージャの Rowan Miller 氏に話を聞きに行くシリーズ動画が Channel 9 に上がっていて面白かったので紹介します。

基本としては Build 2015 のセッション動画で紹介された、以下のスライド 1 枚見ておけば大丈夫です。

Shows | Microsoft Learn

.NET Core 5 かつクロスプラットフォームで動作する Entity Framework を優先した感じです。新機能としてはあまり多くないですが、コア部分がガラッと変わっているので弄りやすくなってます。

The future of Entity Framework (EF7)

https://channel9.msdn.com/Blogs/Seth-Juarez/The-future-of-Entity-Framework-EF7

まずは Entity Framework 7 についての概要を Rowan Miller 氏が話す動画からスタートです。会話を聞き取るのはしんどい感じですが、話の中で出てきたキーワードを拾っておきます。

  • New data store
  • New lightweight & extensible core
  • Part v7 / Part v1

最初のリリースでは In-Memory と SQL Server / SQLite のみの対応となりますが、KVS への対応も視野に入れて開発されているのが Entity Framework 7 の特徴ですね。そして軽量で拡張可能なコアはどこまで実現出来るのか気になるところではあります。

http://blogs.msdn.com/b/adonet/archive/2014/10/27/ef7-v1-or-v7.aspx

Part v7 / Part v1 に関しては ADO.NET Blog で既に扱われているので、こっちを紹介しておきます。

SQL Generation Improvements in Entity Framework 7

SQL Generation Improvements in Entity Framework 7 | Microsoft Learn

バージョン 4 の頃からイマイチな SQL を吐き出すことで有名な Entity Framework ですが、7 からは大きく生成される SQL の質が改善しています。SELECT 系に関しては以前に取り上げたことがあります。

動画では INSERT がバッチ処理されるようになったことを紹介しています。これまでは追加された分だけ INSERT を発行していましたが、複数の VALUES を持つ INSERT が 1 つ実行されるようになりました。

それ以外にも SQL Server 側で実行できないような LINQ 内で書かれた処理を、自動的にクライアントサイドで行うようになっているみたいです。これまでは非対応のメソッドというエラーになっていたのが、全部クライアントサイドで実行される可能性があるので注意したいです。

Alternate Keys in Entity Framework 7

Alternate Keys in Entity Framework 7 | Microsoft Learn

これまで使えなかったのかという感じですが、プライマリキー以外を使った 1 対 N なリレーションなどを簡単に作れるようになったみたいです。

デモはあっさりと進みすぎて何が新しい機能なのかピンと来ませんでしたが、Id 以外に URL などをキーとして扱うときに便利になりましたね。インデックスもちゃんと作られるみたいですし。

Key Generation Strategies in Entity Framework 7

Key Generation Strategies in Entity Framework 7 | Microsoft Learn

SQL Server 2012 で追加されたシーケンスを使ったキーの生成を、透過的に行えるようになったみたいです。

Key Generation Strategies という割にまだこれだけっぽいですね。Snowflake とかを使ってキー生成を行えるような拡張性があれば面白そうなんですけど。

Shadow Properties in Entity Framework 7

Shadow Properties in Entity Framework 7 | Microsoft Learn

ちょっと面白いと思ったのがこの Shadow Properties ですね。CreatedOn / By などの自動的にセットされるべきプロパティを表に出さずに扱えるようになります。

LINQ などで使うにはめんどくさそうなので、フレームワーク側で透過的に使うものかなと思いました。

ロードマップ

これまでは ASP.NET 5 のロードマップしかありませんでしたが、Entity Framework 7 のロードマップも昨日公開されていました。なかなかの大作です。

GitHub - dotnet/efcore: EF Core is a modern object-database mapper for .NET. It supports LINQ queries, change tracking, updates, and schema migrations.

当然ですが基本的なスケジュールは ASP.NET 5 に合わせていく感じです。11 月に RC1 がリリースされる予定で、その時点でクロスプラットフォーム対応は完了という目標のようです。スタビライゼーションに時間をかけるのは ASP.NET 5 と変わらずです。

既に Entity Framework 7 でパフォーマンスを計測している人もいますが、Rowan Miller 氏はまだコードが大幅に変わっているから最適化していないと言ってますし、調べるだけ時間の無駄でしょうね。

関係ないですが Rowan Miller 氏はスタンディングデスクで作業してるんですね。少し興味あります。