0

У меня есть простой db с двумя таблицами employee и employeedetails.Linq возвращает данные, привязанные к внешним ключам

employee имеет ForeignKey empdetailsid, что указывает на таблицу employeedetails

Мой простой LINQ запроса для возврата работнику

var employeeList = from employee in objectcontext.employees select employee; 
return employeeList.ToList(); 

также возвращает employeedetails и все его содержимое поля, которые мне не нужны. Я использую Entity Framework 4.0. Есть ли способ избежать получения ненужных данных. Я мог бы пойти с определением класса модели, который просто имеет поля таблицы сотрудников и может загружаться в это, но мне было интересно, был ли более простой способ. Я использую базу данных mysql.

+0

Обычно EF4 делает сделать отложенную загрузку, если контекст не имел опция установлена изменить поведение. Посмотрите на весь код, связанный с objectcontext. , , Я предполагаю, что вы отключили ленивую загрузку. – Frank

ответ

2

Откуда вы знаете, что запрос возвращает данные о сотруднике? Вы проверили сгенерированный SQL-запрос или просто попытались получить доступ к объекту EmployeeDetails и получили данные. Во втором случае EF действительно может просто быть ленивым - загружать данные по запросу (когда вы пытаетесь получить к нему доступ). В противном случае, если вы уверены, что дополнительные данные получают принесли во время выполнения первоначального запроса, попытайтесь неявно позволяя отложенную загрузку перед выполнением запроса:

objectcontext.ContextOptions.LazyLoadingEnabled = true; 
+0

Я догадываюсь, что это ленивая загрузка, и я бесполезно запаниковал :). set lazyloadingenabled to true в любом случае. Благодарю. – user275157

1

Я не использовал ef 4, но большинство ормов имеют тенденцию использовать концепцию, называемую ленивой загрузкой. Данные в связанных деталях сотрудника извлекаются только при вызове этого объекта. при просмотре объекта в отладчике данные для конкретных сведений о сотрудниках будут получены при нажатии на объект. Чтобы лучше понять, какие данные извлекаются, вам нужно будет запустить профайлер против базы данных, чтобы уловить сделанные sql-запросы. Я не знаю, имеет ли mysql встроенный профайлер, например, sql-сервер. Если не проверить nhprof.

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