Entity Framework と LINQ to SQLのストアド呼び出し比較

たいした比較じゃないですがちょっと気になったので.NET4で試しました。

ストアドプロシージャの定義。
CREATE PROCEDURE [dbo].[PROC_DTO_PARAM]
    @param1 int,
    @param2 int OUTPUT,
    @param3 int OUTPUT
AS
BEGIN
    SET @param2 = @param2 + @param1;
    SET @param3 = @param1;
END

GO
Entity Framework
using (var context = new DataEntities())
{
  var param2 = new ObjectParameter("param2", 2);
  var param3 = new ObjectParameter("param3", 5);
  context.PROC_DTO_PARAM(1, param2, param3);
  Console.WriteLine("param2=" + param2.Value); // 3
  Console.WriteLine("param3=" + param3.Value); // 1
}
LINQ To SQL
using (var context = new DataContext())
{
  int? param2 = 2;
  int? param3 = 5;
  context.PROC_DTO_PARAM(1, ref param2, ref param3);
  Console.WriteLine("param2=" + param2); // 3
  Console.WriteLine("param3=" + param3); // 1
}

Entity Framework と LINQ to SQLで出力されるコードが微妙に異なるので使い方も変ってきます。LINQ to SQLのほうがすっきりしていますが、ObjectParameterはもしかして、名前指定省けるのかも?

Entity Frameworkは出力されるコードをカスタマイズするT4Templateを吐けるのが便利そうです。どこまでカスタマイズできるかわからないですが、Daoを作ってしまってDaoの実装から後ろは自前のフレームワークとかできそう。
LINQ To SQLはドラッグ&ドロップでぱっとコードが吐ける。Entity Frameworkは柔軟性が高いだけにちょっと回りくどい(ストアドプロシージャに対応するメソッドの名前付けを自分で選ばないといけなかったり、戻り値の型を選択できたり)。
Entity FrameworkもLINQ to SQLもどちらもPOCOで、重要と思われる機能差がほとんどない気がします。


ところで最近、これら二つのフレームワークの売りであるLINQを使ってDBアクセスするという方法に懐疑的です。LINQSQLっぽいだけでSQLではないですし。それよりもLINQの使いどころはLINQ to Objectにあるにちがいないというのが最近の感想です。