Entity Framework 4 - предотвращает базовое кэширование

Если у меня есть контекст фреймворка сущности, обычно, если я запускаю запрос вроде:

db.Invoices.Where(I => whatever);

а затем запустите еще что-нибудь:

db.Invoices.Where(I => something_else);

любые объекты, возвращенные из второго запроса, которые также были возвращены из первого, не будут загружены из базы данных. EF просто возьмет объект, который уже есть для этого ключа.

Вопрос. Каков наилучший способ отключить эту функцию? Могу ли я сказать EF для загрузки каждого объекта, который ему нужен, из базы данных без исключения?

Спасибо!

Ответ 1

Вам нужно изменить параметр MergeOption для вашей сущности, например

db.Invoices.MergeOption = MergeOption.OverwriteChanges;

OverwriteChanges означает, что объекты всегда загружаются из источника данных. Вы также можете использовать NoTracking, чтобы полностью отключить отслеживание, что может повысить производительность, если вам не нужно делать обновления данных или повторно использовать запросы. Значением по умолчанию является AppendOnly, у которого есть поведение, которое вы наблюдали.