2009-06-09 3 views
0

Я, вероятно, рассматриваю одну из самых больших проблем удобства использования в EF.Entity Framework: Выполнение больших запросов

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

И представьте, что моя логика также зависит от более связанных таблиц за этими категориями (подкатегории и т. Д.).

Нам нужна большая часть этой модели в большом количестве точек в коде, поэтому мне нужно, чтобы вся модель была заполнена и подключена EF.

Для этого мы просто запрашиваем объект ObjectContext и включаем в него типы безопасности.

Но это становится непрактичным и подверженным ошибкам.

Есть ли у кого-нибудь предложения по решению таких проблем?

ответ

3

Используйте проекцию, чтобы получить только те значения, которые вам нужны, особенно если вы не собираетесь обновлять все. Вы, наверное, не нужно каждый свойство предмета мебели и т.д. Таким образом, вместо получения самой сущности, проект, что вы хотите:

from b in Context.Buildings 
where b.Id == 123 
select new 
{ 
    Name = b.Name, 
    Rooms = from r in b.Rooms 
      select new 
      { 
       XDimension = r.XDimension, 
       // etc. 

Теперь вам больше не придется беспокоиться о том, загружен ли что-то; материал, который вам нужен, загружен, а материал, который вам не нужен, - нет. Сгенерированный SQL также будет значительно проще.

+0

благодарит за ответ. Я сомневаюсь, что этот подход будет практичным, но стоит попробовать ... – Bertvan

+0

Я нахожу его гораздо более практичным, чем либо оплачивать стоимость исполнения загружаемого материала, который вам не нужен, либо беспокоиться о том, что вы делаете потребность загружена. –

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