Entity Framework, как выбрать только несколько полей или ленивую загрузку с помощью STE?

Я использую структуру сущностей и необработанные запросы sql. У меня есть представление, но в некоторых случаях я хотел бы получить только несколько полей, потому что одно поле является файловым потоком и имеет большой размер.

Однако, когда я использую, например, следующий sql:

select Name, Surname from persons

Я получаю исключение, в котором говорится, что у читателя нет поля XXX. Это связано с тем, что моя сущность представления имеет все поля представления, но при выполнении запроса результат не возвращает все поля.

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

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

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

Таким образом, я хотел бы знать, можно ли выбрать только некоторые поля с STE и необработанным sql.

Спасибо.


person Álvaro García    schedule 07.06.2012    source источник
comment
Взгляните на Table Разделение.   -  person Gert Arnold    schedule 08.06.2012
comment
Спасибо, я не знаю, что этот вариант существует. Однако это заставляет меня спросить, лучше ли создать представление в базе данных с той частью таблицы, которая мне интересна, или использовать разбиение в EF. Спасибо.   -  person Álvaro García    schedule 10.06.2012
comment
Я бы склонялся к первому, но многие люди не могут изменить свои базы данных. В этом случае разделение таблицы является хорошим вариантом.   -  person Gert Arnold    schedule 10.06.2012


Ответы (1)


Я не слишком уверен в применении этого к объектам самоотслеживания, но в прошлом вы всегда делали это с анонимным классом (или классом, который вы создаете), меньшим, чем ваш объект:

context.People.Select(p=>new { Name = p.Name, Surname = p.Surname })

Это выполнит выбор SQL, аналогичный тому, который указан в вашем вопросе.

person Not loved    schedule 07.06.2012
comment
единственный способ сгенерировать SQL, возвращающий подмножество полей, — использовать анонимный тип. - person Jone Polvora; 08.06.2012
comment
@JohnPolvora это на самом деле неверно. Следующее также создаст тот же SQL context.People.Select(p=>new Person{ Name = p.Name, Surname = p.Surname }) - person Not loved; 09.06.2012
comment
Извините, я имею в виду использование проекции с Select() - person Jone Polvora; 09.06.2012