LINQ to SQL を触り始めました
LINQ to SQLってあっさりしたO/Rマッパーだと思っていたんですが、遅延ローディングがあったり、JPAのフェッチ結合みたいなのがあったり、JPAの永続コンテキストみたいなのがあったり、一応継承のマッピングもサポートしていたり(単一継承のみ)、と思っていたより高機能です。
ADO.NET Entity Framework という LINQ to SQL とは別のもっと高機能なO/Rマッパーが今年リリースされるらしいんですが、LINQ to SQLで十分じゃないの?と思っちゃいますね。
いまのところの印象としては
- JavaのJPAに似ているか似ていないかでいうとまちがいなく似ている。
- 永続コンテキスト相当のキャッシュを自動でフラッシュする機能がないので、そのあたり注意しないと不整合なデータを見ちゃいそうで怖いなという感じ。
- どこまでエンティティを取得するかの指定は、JPAと違ってクエリと切り離されているので、サービス(ロジック)のメソッドで宣言的に(たとえばアトリビュートとかで)指定しておくことでDAOをすっきりできそう。
- LINQがSQLに似ているといっても、やっぱり違うので意外に書き間違える。特にグルーピングとかラムダ式とか使い始めるとSQLとは別物という感じ。
- エンティティのコードをVisualStudioで自動生成するか、自分で好きに書くかでプログラムの仕方がガラッとかわるはず。