EFチームは、ユーザーの要望と機能への投票ができるユーザーボイスフォーラムを準備した。現在可能な回避策とともに、投票数が多い要望機能上位7位を紹介しよう。
今日時点での上位要望は -
SQL生成の改善 (ステータス=開始)
要望 -
手書きのSQLでは15行程度の単純なselectステートメントなのに、5000行近いSQLステートメントが生成されています..
MSはすでにいくつかの進歩を遂げている。彼らの反応は -
コアEFライブラリの更新には、.NET 4.5に含まれるSQL生成の改善が含まれています。ただし、コメントに書かれているすべてのシナリオが解決できるわけではありません。
回避策: EFを使うことをやめる以外に現実的な解決策はない
バッチCUDサポート (ステータス=レビュー中)
Creates/Updates/Deletesのバッチは、ほとんどのORMにかけているであろうLOBアプリケーションに重要な機能である。DBaseとPowerBuilderのような古いのプログラム言語は、数十年前にこの機能を持っていた。提案にはあるが、ORMはバルクトランザクションにむいているわけではなく、バッチ処理ではなくOLTPに適している。
解決策
- EFの拡張機能は、バルク更新と削除機能を提供する(ただしバルク挿入には対応していない)
- Entity Frameworkをバルクトランザクションで使わない - SQLを自分で書く。実際のことろ、ORMの利用を避けるのが適している。
EFのセカンドレベルキャッシュサポート (ステータス=レビュー中)
NHibernateではサポートされているが、Entity Frameworkはデフォルトではまだサポートされていない。
解決策 – Julie Lerman氏は、彼の記事“Entity FrameworkとAppFabricのセカンドレベルキャッシュ”で、Windows Server AppFabricをセカンドキャッシュとしての使い方を紹介している
Entity Designer: 200以上のエンティティを使うためのスピードアップと最適化
解決策: 50~100エンティティに達したところで、モデルを分割する。昔の投稿で書かれている内容で、これをサポートすることが、技術面だけでなく、操作性の課題でもあることが書かれている。これに投票されても、MSがこれについて検討しているのかは不明である。
複数のデータベースをサポート (ステータス=レビュー中)
デフォルトでは、モデルは単一のデータベースにマッピングされているため、サポートされていない。
解決策 – 2つのモデルをマージして、EFで複数のデータベースを使うにはシノニムを使う必要がある。
デザイナで、エンティティキーにGUIDをサポート – デザイナを使ってGUIDカラムにStoreGeneratedPattern属性を追加しても、データモデルのストレージ部分を更新しないバグによるものである。GUIDカラムは、新しいレコードを作成時に“000..”値を生成するためである。
解決策 – ここで説明されているように.edmxファイルに手でStoreGeneratedPattern属性を追加する。
Rails Migrationsのようにスキーママイグレーション (EF 4.3で、コードファーストマイグレーションとして提供予定)
この機能は現在、EF 4.3ベータで提供されている。この機能に関するさらに詳細は、msdn blogを参考にして欲しい。
解決策 – データベースプロジェクトを使って、アップグレードスクリプトを作成する。コードファーストが新しいスキーマを作ると、新しいデータベースプロジェクトにインポートされ、古いデータベースにデプロイされる。
他にも興味深い機能のアイディアが様々なユーザーから寄せられており、投票やあなたのアイディアを投稿して、なにがあなたにとって重要かをEFチームに知らせてください!