Службы данных WCF - ни .Expand, ни .LoadProperty, кажется, не делают то, что мне нужно - PullRequest
1 голос
/ 13 апреля 2010

Я создаю приложение для управления школой, где они отслеживают опаздывание и отсутствие учеников. У меня есть три сущности, чтобы помочь мне в этом. Студенческое юридическое лицо (имя, фамилия, удостоверение личности и т. Д.); объект SystemAbsenceTypes со значениями SystemAbsenceTypeID для Позднего, Отсутствующего с Причиной, Отсутствующего без Причины; и таблицу перекрестных ссылок с именем StudentAbsences (сопоставление идентификаторов учащихся с идентификатором типа отсутствия, а также датой и полем Notes).

То, что я хочу сделать, это запросить у моих сущностей данного учащегося, а затем сложить число каждого вида отсутствия для заданного диапазона дат. Я без проблем подготавливаю свой объект currentStudent, затем делаю это ...

Me.Data.LoadProperty (currentStudent, "StudentAbsences") 'Загружает данные перекрестных ссылок

lblDaysLate.Text = (Из ab In currentStudent.StudentAbsences Где ab.SystemAbsenceTypes.SystemAbsenceTypeID = Common.enuStudentAbsenceTypes.Late) .Count.ToString

... и эта вторая строка завершается ошибкой, сообщая: «Ссылка на объект не установлена ​​для экземпляра объекта».

Я предполагаю, что проблема в том, что, хотя он видит, что есть (скажем, четыре) отсутствия для currentStudent (т. Е. CurrentStudent.StudentAbsences.Count = 4) - он пока не может "всматриваться" в каждое из отсутствие взглянуть на его тип. Фактически, каждый из четырех объектов StudentAbsence имеет свойство SystemAbsenceType, которое , а затем наконец имеет SystemAbsenceTypeID.

Как мне использовать .Expand или .LoadProperty, чтобы это произошло? Нужно ли мне вслепую просматривать все эти коллекции, запуская .LoadProperty для всего, прежде чем я смогу выполнить свой запрос?

Есть ли какая-то другая техника?

1 Ответ

4 голосов
/ 27 апреля 2010

Когда вы загружаете студента, попробуйте расширить связанные свойства.

var currentStudent = context.Students.Expand("StudentAbsences")
                                     .Expand("StudentAbsences/SystemAbsenceTypes")
                                     .Where(....).First();
...