2010-11-26 142 views
3

Supose我有以下从数据库表创建实体:级联渴望加载问题

学生

学生包括个人导航性能。

人有导航属性国家连接查找表国家。

在学生元数据中,我把[Include]作为导航属性Person。 在个人元数据,我把[Include]导航财产国家。

当装载学生的数据,我想预先加载喜欢包括个人和国家的数据:

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

这是工作的罚款,当我使用ASP.NET数据地头服务的早期版本。现在,当它更改为WCF Ria服务时,上述方式无法工作。 系统给我的错误说,国家不是学生的导航属性。

如何解决此问题?

回答

2

错误是正确的。

Include是你在查询的ObjectQuery<T>,在这种情况下是“学生”。

CountryPerson的导航属性,而不是Student

你的代码改成这样:

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

或者干脆:

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

由于EF会自动包括基于内嵌的 “人” 包括。

您需要记住Include基于ObjectQuery<T>返回ObjectQuery<T>它被调用。

因此,只是因为你在做Students.Include("Person"),那并不意味着在那一点上,变量是ObjectQuery<Person> - 变量仍然是ObjectQuery<Student>

+0

太棒了!很高兴知道。简单解决方案 – KentZhou 2010-11-26 15:16:20