Я использую WCF Dataservice / EF 4.1 и клиентское приложение WPF.
Вот моя проблема в более простой форме. Допустим, я опрашиваю клиентов:
var query = (from o in ServiceRef.Clients.Expand("Addresses,PhoneNumbers,EmailAddresses")
where o.FirstName.ToLower().Contains(sf) ||
o.LastName.ToLower().Contains(sf) || ...
orderby o.LastName
select o).Take(100);
Это все, что мне нужно для идентификации клиента. Однако в будущем я хочу увидеть комментарии, историю покупок или другие связанные объекты, не «расширенные» в первом запросе. Если я сделаю запрос снова, используя тот же контекст ServiceRef, у меня никогда не будет расширен «Комментарии».
Я предполагаю, что это связано с тем, что Контекст обнаруживает, что сущность «Клиент» уже отслежена, и, следовательно, не выполняет новый запрос к Сервису.
Теперь в некоторых сообщениях говорится, что никогда не следует хранить DBContext так долго, с чем я не согласен полностью. Это простой сценарий Master / Details. Создание нового контекста для каждого «подробного запроса» для получения дополнительных данных кажется каким-то неправильным. Есть ли способ заставить EF «перезагрузить» сущность для получения дополнительных данных?
Конечно, я могу расширить каждую присоединенную сущность, которая мне когда-либо понадобится в начальном запросе. Но затем я получаю огромное количество данных для каждого результата поиска. 95% из которых никогда не будут использованы.
Чтобы было ясно. То, о чем я прошу, - это вопрос «лучшей практики». Есть ли путь в середине? Между расширением (...) всех данных все время <> Создание нового контекста все время.? Есть ли способ загрузить дополнительные данные при необходимости.
Спасибо, Андреас