私はもう一度パフォーマンスをテストしています。データベースから簡単な結果を得たいだけです。Entity Frameworkがテーブルを結合しないようにするにはどうすればよいですか?
例
var jobsList = from j in mf.Jobs
where j.UserID == 1001 select new { Job = j };
これは、残念ながら私はEFがやりたくない、このリストに私のUserオブジェクトを結合します。関係があるからといってEFに参加しないように指示するにはどうすればいいですか?基本的には、そのテーブルから単純な行が必要です。
また、別の種類の検索を使用する必要がありますか。私はまだ以下のデータベース検索の基本的なタイプを使用していますが、今はDBの作業をよりうまく処理する方法があると感じています。私はより明確な文脈で言って基本的にはどのような
SqlConnection myconnection = new SqlConnection();
編集
。それだけではなく、次のことを得ることです。
Job.JobID
Job.UserID
//Extra properties
私は、ユーザーオブジェクトを簡単に必要とされるよりも道多くのメモリを消費し、プラス私はそれを必要としないこと
Job.JobID
Job.UserID
Job.User
//Extra properties
を取得します。
マイソリューション
だから私はまだあまりEFを信じ、ここ理由であるわけではありません。私はLazyLoadingをオフにしてそれをオンにして、あまりパフォーマンスの違いがあまり気づかなかった。次に、SqlConnection型のメソッドが使用するデータの量を、EFのメソッドと比較して比較しました。
全く同じ結果セットが返されますが、ここではパフォーマンスの違いがあります。
私のEntity Frameworkメソッドでは、仕事のリストを取得します。
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と一緒に行かないことです。
生成されたSQLの外観はどうですか? – Magnus
遅延読み込みが有効になっていますか?そうでない場合は、Userプロパティを熱心に読み込んでいるために結合が行われている可能性があります。 –
「これは残念ながら私のUserオブジェクトをこのリストに結合する」という意味ですか? – JotaBe