Как работает ObjectStateManager.GetObjectStateEntries (). Select (). OfType ()? - PullRequest
1 голос
/ 04 ноября 2011

Я пытаюсь понять механизм, который заставляет работать этот код, который я поднял из другого вопроса SO:

        List<ResourceType> ResourceTypes2 =
            this.ObjectStateManager
                .GetObjectStateEntries(EntityState.Added)
                .Select(entry => entry.Entity)
                .OfType<ResourceType>().ToList();

Является ли приведенный выше запрос объекта или запрос EF?

Причина, по которой я спрашиваю, заключается в том, что я использую ее с таблицей, в которой хранится> 100К строк, и я хочу убедиться, что ей не нужно выполнять какое-то перечисление строк.

Как побочный вопрос, я имеюКаковы мысли об использовании вышеупомянутого механизма для реализации средства Upsert, которое позволяет клиентскому коду просто удалять и затем добавлять в контекст, но при сохранении сравнивает удаленное с добавленным, чтобы получить обновления, где строка уже существует?Это был бы «режим», в который помещается контекст, чтобы не иметь побочной семантики.

1 Ответ

1 голос
/ 04 ноября 2011

Это очень сильно зависит от типа возвращаемого значения this.ObjectStateManager .GetObjectStateEntries (EntityState.Added)

Если он возвращает IEnumerable, любые последующие операции будут использовать реализации LinqToObjects, тогда как если он возвращает IQueryable, выЯ буду использовать реализации EF.

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...