Недавно я начал работать с EF и MVC в .Net Web Applications, и у меня возникла проблема, и мне хотелось узнать, что вы думаете и вы могли бы указать мне в правильном направлении.Использование ICollection с Entity Framework от одного до многих и как повысить производительность
Итак, у меня есть два класса: DataGroup и DataElements. Элемент DataElement может находиться в одной DataGroup или none. Я использовал свободно API в DataContext для достижения этой цели:
modelBuilder.Entity<DataGroup>()
.HasMany(dg => dg.DataElements)
.WithOptional()
.HasForeignKey(de => de.DataGroup_Id);
В моем классе DataGroup я получил следующее:
public virtual ICollection<DataElement> DataElements { get; set; }
[NotMapped]
public ICollection<DataElement> RecentDataElements //returns the last 15 data elements
{
get
{
return DataElements.OrderByDescending(de => de.GeneratedDateTime).Take(15).Reverse().ToList();
}
}
[NotMapped]
public DataElement LatestDataElement //returns the latest data element (if any)
{
return DataElements.OrderByDescending(de => de.GeneratedDateTime).FirstOrDefault();
}
Так что вопрос, я с кодом выше, что, когда Я называю LastDataElement или RecentDataElements, я в конечном итоге жду немного.
Я считаю, что это связано с тем, что свойство DataElements в классе DataGroup является ICollection и RecentDataElements и LastDataElement, что приводит к тому, что EF загружает все элементы данных в память перед сортировкой и возвратом подмножества (могут быть тысячи DataElements в DataGroup).
Есть ли способ сделать это более эффективным?
Я играл с идеей прямого запроса к datacontext, а не с использованием свойства DataElements, но я хотел посмотреть, есть ли какие-либо другие варианты, которые я должен рассмотреть. Мне сказали коллеги, что было бы плохой практикой поместить datacontext в модель (независимо от того, правильны они или нет, это другая проблема).
Благодарим за помощь и совет. Очень ценится :)