Каскадная проблема загрузки - PullRequest
3 голосов
/ 26 ноября 2010

Предположим, у меня есть следующие сущности, созданные из таблиц базы данных:

Person

Student

Учащийся включает Person как навигациюсвойство.

Person имеет свойство навигации Country для подключения справочной таблицы Country.

В метаданных Student я ставлю [Include] для свойства навигации Person.В метаданных Person я ставлю [Include] для свойства навигации Country.

При загрузке данных об ученике я хочу загружать, как и данные о персоне и стране:

this.ObjectContext.Students.Include("Person").Include("Country");

Это былоработает нормально, когда я использую предыдущую версию ASP.NET Data Ria Service.Теперь, когда он меняется на WCF Ria Service, вышеуказанный способ больше не работает.Система выдает ошибку "Страна не является навигационным свойством" Студента.

Как решить эту проблему?

1 Ответ

2 голосов
/ 26 ноября 2010

Ошибка правильная.

Include находится на ObjectQuery<T>, который вы запрашиваете, в данном случае «Студенты».

Country - это навигационное свойство Person, а не Student.

Измените свой код следующим образом:

this.ObjectContext.Students.Include("Person").Include("Person.Country");

Или просто:

this.ObjectContext.Students.Include("Person.Country");

Поскольку EF автоматически включает "Person" на основевложенное включение.

Вы должны помнить, что Include возвращает ObjectQuery<T> на основе ObjectQuery<T>, на который оно было вызвано.

Так что только потому, что вы делаете Students.Include("Person"), этоне означает в этот момент, переменная ObjectQuery<Person> - переменная по-прежнему ObjectQuery<Student>.

...