2010-10-15 4 views
10

Если у меня есть Entity Framework 4 контекст, как правило, если я выполнить запрос, как:Entity Framework 4 - предотвратить базовое кэширование

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

и потом запустить что-то другое:

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

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

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

Спасибо!

ответ

9

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

db.Invoices.MergeOption = MergeOption.OverwriteChanges; 

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

Смежные вопросы