Я использую Entity Framework для SQL Azure, и на одной странице моего приложения мы показываем пользователю довольно много связанных данных. На странице загружается до 30 элементов, но каждый элемент имеет 5 сопоставлений «один ко многим» с другими объектами. Время запроса находится на разумном уровне, но я теряю немного производительности при отображении объектов. (почти целую секунду).
Вот пример того, как выглядит мой объект
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();
Актуальность конкретной задачи зависит сначала от статуса, а затем от даты выполнения. Поэтому я создал переопределение IComparable для использования с сортировкой. Дело в том, что постраничные запросы не работают хорошо в этом сценарии, потому что сортировка не основана на int или дате (я прав?)
В остальной части нашего приложения мы показываем меньше информации о каждой задаче, и Linq2Entities работает просто отлично. Сопоставление объектов в этом случае убивает нас, хотя. Я пошел по пути прямого перехода к БД с Dapper, но картографирование один ко многим имеет свои предостережения. Для нескольких отношений я думаю, что это будет работать хорошо, но не для 5-6. Следующей вещью, на которую я посмотрел, был PetaPoco, но я не продвинулся слишком далеко, прежде чем подумал, что лучше сначала задать вопрос здесь.
Я с ума сошел, пытаясь вернуть столько данных? Каковы мои варианты получения максимальной производительности от этого? Я возьму немного сложности, так как это только одна область применения.