После MSDN documentation мы можем использовать Local свойство, чтобы получить местные/кэшированные данные непосредственно из контекста без дополнительных запросов к источнику данных:Использование DbSet <TEntity> .local собственности в Entity Framework
Получает ObservableCollection, который представляет локальный вид всех добавленных, неизмененных и измененных объектов в этом наборе.
(...)
Это свойство может использоваться для связывания данных путем заполнения набора данными, например, с помощью метода расширения нагрузки, а затем привязки к локальным данным через это свойство.
Проблема заключается в том, что код не работает (Local пуста):
context.SampleEntities.Select(x => new { x.A, x.B }).Load();
// context.SampleEntities.Local.Count is 0
Но в данном случае, кажется, работает правильно:
context.SampleEntities.Load();
// context.SampleEntities.Local.Count is not 0
Может кто-то может объясните, что является правильным способом использования Местный property?
Более того, как использовать его с частично загруженными объектами, как в случае выше?
EF не имеет возможности хранить эти запрошенные запросы: у вас нет коллекции, содержащей только эти поля. Я бы предположил, что просто невозможно кэшировать их локально по этой причине. –
Но я думаю, что это должна быть одна и та же коллекция (SampleEntities), где объекты не полностью загружены (например, некоторые поля пустые). Моя логика заключается в том, что результат SQL-запроса также должен быть сохранен в DbSet (где действительно важно ключ сущности и состояние объекта) или альтернативным способом, частично загруженные объекты вообще не кэшируются. Итак, вы указываете, что второй сценарий правильный? –
Kryszal