Я ни в коем случае не опытный пользователь LINQ, но могу нащупать свой путь на базовом уровне. У меня есть вопрос относительно того, как LINQ формулирует свой запрос "стратегия". Я постараюсь объяснить это как можно лучше и напишу очень глупый пример по памяти.
У меня есть модель данных, которая содержит несколько представлений базы данных. Допустим, представления имеют структуру столбцов следующим образом:
PersonView
PersonViewId | Surname | GivenName | OtherViewId
------------------------------------------------
OtherView View
OtherViewId | PersonViewId | Name
---------------------------------
После установки первичных ключей для представления (PersonView.PersonViewId / OtherView.OtherViewId) и установки в соответствующих полях необнуляемых значений, я создаю связь между PersonView.PersonViewId (Parent) и OtherView.PersonViewId (Child). Я установил его как «один к одному» и написал некоторый код для его использования:
StringBuilder s = new StringBuilder();
foreach(PersonView p in dc.PersonViews)
{
s.AppendLine(p.OtherViews.Name + "<br />");
}
Заметив крайне низкую производительность, я профилировал базу данных и заметил, что она выполняет запрос для каждого из PersonView в выражении foreach.
В этот момент я переписал запрос и заменил ассоциацию в DBML на JOIN в запросе LINQ, профилировал базу данных и запросил базу данных, как и ожидалось, только один раз.
Я думаю, что это как-то связано с запросом к БД, но я не уверен, где его отладить. Может ли кто-нибудь указать мне правильное направление, чтобы помочь мне повысить производительность использования ассоциаций, или я застрял, используя JOIN для достижения того, что мне нужно?
Спасибо:)