Entity Framework 奮闘記

LINQの勉強を始めたのは今年6月です。その後最新技法が[Linq to Entity]であると分かり、舵を[Entity Framework](以下EFといいます)の勉強に切り替えました。しかし[LINQ to Entity]の手ごろな教科書がありません。

LINQの勉強で4冊の本を買いました。

1. [プログラミング LINQ] Microsoft Press
2. [LINQ in Action] Manning
3. [Programming Entity Framework] O’Reilly
4. [murach’s ADO.NET 3.5 LINQ and the Entity Framework with VB 2008] Marach

2は教科書としてはよく書かれていますが、残念なことに2008年1月の出版ですので、昨年秋リリースされたEFの話題がありません。

1は和訳ですが、翻訳が悪いとの印象で必要な箇所の拾い読みをしています。原書は2008年の出版で、EFの解説が余りありません。訳書で付録としてEFの話題を追加していますが、どちらにしても入門程度の解説です。

4は各見開きの左ページは解説、右ページは表やコード、と徹底した構成になっていて、読みやすさを第一にしていますが、内容は入門程度です。

EFの解説書としては3が最適ですが、細かい字で構成も読みにくい。著者はおそらく教科書として書く気はまったくなく、「分かるやつは分かる」と至ってマイペースで書いていますので、私の力では800ページ弱のこの分厚い本を完全に理解するには半年程度必要かもしれません(当然勉強にいつまでも時間をとることはできません)。

しかし、考えてみればVisual Sdudioがもっともいい先生です。いつも文句も言わず根気よく私の解答の採点をしてくれます。ともかくプログラムを書いてVisual Sudioで格闘していれば大体話は分かってきます。

さて、こんな状態でともかくEFのプログラムを書いています。

LINQのいい点はDBアクセスプログラムが驚くほどが簡単に短くなったということ、
また、一度プログラムに読み込んだデータに対して、Queryを発行できますので(これはLINQの開発の目的のひとつでしょうが)、強力なデータ操作技術であることは間違いありません。

悪い点は(というより、困った点といった方がいいかも知れません)、一言で言えば「完成度が低い」ということです。
たとえば、ウィザードを使って[Entity Data Model](以下EDMといいます)を作成すると、データベースのテーブルに対応したクラスをプログラム上に作成します。この操作はデザイン画面で確認できますが、このモデルのメンテナンスがうまくない。
ウィザードで、あるテーブルをEDMに読み込んで、都合で削除したとします。再度そのテーブルをこのEMDに追加することができません。どうしてもこのEDMに入れたいのであれば、このEDMをゼロから再構築しなければいけません。これはこれで大騒ぎになります。

プロジェクトで一つのEDMだけ使うことにして全部のテーブルを読み込むのも一つの解決策かも分かりません。私は経験が少ないので、全部を一つのEDMにするのがいいかどうか分かりません。プロジェクトで数10以上のテーブルを使うのは珍しいことではないでしょう。
これを一度に一つのEDMにするのは、「パフォーマンスの点でどうなのか」、「大きなEDMのメンテナンスで手のつけられない大騒ぎになるのではないか」、逆にEDMを小割りにすると、EDM相互の関連が必要になったとき、また別の厄介な問題が発生し、どう処理するか。
どちらの道がいいのかまだ判断がつきません。

[LINQ to Entity]の勉強は何故か「しんどい」。たぶん理由のひとつは、[Object]とか[Entity]とか[Query]とかの普通名詞がいろいろ組み合わさって別の概念になっている。[ObjectEntity]とか[ObjectEnties]とか[ObjectEntry]とか[ObjectStateEntry]とか。何が何だか混乱します。

先にも書きましたが、現在もっともしっかり書かれた解説書は、Julia Lermanの[Programming Entity Framework] で、結局最後はこの本の解説を読むことになりますが、この本はEFの基本的枠組みの構成なりコンセプトなりのしっかりした解説をしないままに、多くの紙面を費やして様々な技術を解説していきますので、読むほうは「何がどうなっているのだ」としんどいばかりです。
来年になれば、もっといい教科書がでてくるのでしょうが、今はこの状態で進んでいくしかないのでしょう。

このブログでもEFをもう少し勉強して内容のあるお話を書ければと思います。

error: コピーできません !!