Entity Framework 4 - предотвращает базовое кэширование - PullRequest
10 голосов
/ 15 октября 2010

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

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

, а затем запустить что-то еще:

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

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

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

Спасибо!

1 Ответ

9 голосов
/ 15 октября 2010

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

db.Invoices.MergeOption = MergeOption.OverwriteChanges;

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

...