SQLAzureにEntityFrameworkを使用しており、アプリケーションの1ページに、かなりの量の関連データをユーザーに表示しています。ページに最大30個のアイテムを読み込んでいますが、各アイテムには、他のオブジェクトへの5つの1対多のマッピングがあります。クエリ時間は妥当なレベルですが、オブジェクトマッピングでかなりのパフォーマンスがリークしています。(ほぼ1秒)。
これが私のオブジェクトがどのように見えるかの例です
public class Task
{
public string Name {get; set;}
public string Status {get; set;}
public DateTime DueDate {get; set;}
public IEnumerable<TaskData> Data {get; set;}
public IEnumerable<Transaction> Transactions {get; set;}
public IEnumerable<File> Files {get; set;}
public IEnumerable<Comment> Comments {get; set;}
public IEnumerable<People> People {get; set;}
}
タスクには、名前、ステータス、および期日があります。また、カスタムの名前と値のペアである多くのTaskData 、タスクの履歴を示す多くのトランザクション、多くのファイル、多くのコメント、およびそれに取り組んでいる多くの人々がいます。
私のEFクエリは次のようになります。
var Items = context.Items.Include(x=>x.Data).Include(x=>x.Files).Include(x=>x.Comments).Include(x=>x.People).Where(some constraint).ToList();
特定のタスクの関連性は、最初にステータスに基づいており、次に期日に基づいています。そこで、sortで使用するIComparableオーバーライドを作成しました。重要なのは、ソートがintまたはdateに基づいていないため、このシナリオではページングされたクエリがうまく機能しないということです(私は正しいですか?)
アプリケーションの残りの部分では、各タスクに関する情報をあまり表示せず、Linq2Entitiesは正常に機能しています。ただし、この場合のオブジェクトマッピングは私たちを殺しています。私はDapperを使用してDBに直接アクセスする道を進んできましたが、1対多のマッピングには注意が必要です。いくつかの関係については、うまくいくと思いますが、5-6ではうまくいきません。次に見るのはPetaPocoでしたが、最初にここに質問を投げたほうがいいと思うまで、それほど遠くはありませんでした。
大量のデータを取り戻そうとすることに夢中ですか?これから最大のパフォーマンスを得るための私のオプションは何ですか?アプリケーションの1つの領域しかないため、少し複雑にします。