さて、EFのパフォーマンスをもう一度テストしていて、データベースから単純な結果を返したいだけです。
例
var jobsList = from j in mf.Jobs
where j.UserID == 1001 select new { Job = j };
残念ながら、これは私のUserオブジェクトをこのリストに結合しますが、EFには実行させたくありません。関係があるからといって参加しないようにEFに指示するにはどうすればよいですか。基本的に、私はそのテーブルから単純な行が欲しいだけです。
または、別のタイプの検索を使用する必要がありますか?私はまだ以下の基本的なタイプのデータベース検索を使用しており、今ではdb作業を処理するためのより良い方法があると感じています。
SqlConnection myconnection = new SqlConnection();
編集
基本的に、私が言っていることは、より明確な文脈でです。それは、次のものだけを取得するのではなくです。
Job.JobID
Job.UserID
//Extra properties
ゲット
Job.JobID
Job.UserID
Job.User
//Extra properties
そのUserオブジェクトは、必要以上のメモリを簡単に消費します。さらに、私はそれを必要としません。
私の解決策
だから私はまだEFをあまり信じていません。その理由はここにあります。LazyLoadingをオフにしてオンにしたところ、パフォーマンスの違いはあまり気になりませんでした。次に、SqlConnectionタイプのメソッドが使用するデータの量をEFメソッドと比較しました。
まったく同じ結果セットが返されます。パフォーマンスの違いは次のとおりです。
私のEntityFrameworkメソッドでは、ジョブのリストが返されます。
MyDataEntities mf = new MyDataEntities(); // 4MB for the connection...really?
mf.ContextOptions.LazyLoadingEnabled = false;
// 9MB for the list below
var test = from j in mf.Jobs
where j.UserID == 1031
select j;
foreach (Job job in test) {
Console.WriteLine(job.JobID);
}
ストアドプロシージャを実行して結果セットを返すSqlConnectionメソッドの場合。
//356 KB for the connection and the EXACT same list.
List<MyCustomDataSource.Jobs> myJobs = MyCustomDataSource.Jobs.GetJobs(1031);
Entity Frameworkが標準のSqlConnectionよりもはるかに多くのことを行っていることを完全に理解していますが、結果セットに少なくとも25倍のメモリが必要な場合は、なぜこのような誇大宣伝が行われるのでしょうか。それだけの価値はないようです。
私の解決策は、結局EFを使用しないことです。