Могу ли я использовать автоматически сгенерированные классы сущностей Linq-to-SQL в режиме «отключен»? - PullRequest
1 голос
/ 15 марта 2010

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

Теперь предположим, что я хочу передать данные о сотрудниках в метод ShowAges, который выведет имя и возраст для списка сотрудников. Я получу данные для данного набора сотрудников с помощью запроса linq, который вернет мне набор Employee экземпляров. Затем я могу передать Employee экземпляры методу ShowAges, который может получить доступ к полям Name & Age, чтобы получить необходимые данные.

Однако, поскольку моя таблица Employees связана с различными другими таблицами в моей базе данных, мой класс Employee также имеет поле Department, поле Manager и т. Д., Которые обеспечивают доступ к связанным записям в этих базах данных. другие таблицы. Если бы метод ShowAges вызывал какой-либо из этих методов, это привело бы к тому, что по требованию из базы данных можно было бы получить намного больше данных.

Я хочу быть уверен, что метод ShowAges использует только те данные, которые я уже извлек для него, но я действительно не хочу заниматься проблемой определения нового класса, который реплицирует Employee класс, но имеет меньше методов. (В моем реальном сценарии класс должен был быть значительно более сложным, чем класс Employee, описанный здесь; у него было бы несколько «объединенных» классов, которые нужно заполнить, и другие, которые этого не делают).

Есть ли способ «выключить» или «отключить» экземпляры Employees, чтобы попытка получить доступ к любому свойству или связанному объекту, который еще не был заполнен, вызвала исключение?

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

Ответы [ 2 ]

2 голосов
/ 15 марта 2010

может быть, не ответ, который вы ищете, но как насчет проецирования результатов вашего запроса в более легкое POCO, например:

var employeePOCOs = from e in l2sEmployees
select new EmployeePOCO
{
Id = e.Id,
Name = e.FirstName + " " + e.LastName
};

где EmployeePOCO - это предопределенный класс

это поможет? Я использовал это при возврате объектов Entity Framework обратно через вызов AJAX, где вывод шел в JSON, и это, похоже, помогло.

1 голос
/ 15 марта 2010

Один из способов сделать это - отсоединить сущность от контекста базы данных.Посмотрите на ответ, который я дал на аналогичный вопрос.Он показывает вам несколько способов отсоединения сущностей.

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