2009-02-08 76 views
2

说我有一个角色实体和一个网站实体。现在,一个站点有很多角色,所以在Role类中有一个表示该关系的Site属性。如果我想要的角色的网站,我会做到这一点:实体框架:加载多对一实体

Site.Roles.Load() 

的问题是,因为在角色类站点属性不是一个集合,但只是一个单一的实体,没有Load方法:

currentRole.Site //???? 

因此,当一个角色被加载时,网站是空的,没有办法获得网站,除了说角色集合上的查询来获得SiteID,从网站集中获取网站,最后将其设置为currentRole的网站属性。

必须有更好的方法?我是否必须在查询中强制进行某种连接?看起来像这样会由代码生成,就像Load方法的行为一样。

回答

1

访问它将加载它。如果您希望它明确加载它,则对象查询应该有一个.Include()方法。

db.Sites.Include("Role").ToList(); 

Here's some documentation

6

实际上,访问它不会自动加载它。您可以使用Include方法在单个查询中包含相关实体,但您也可以像引用集合一样使用引用的Load方法 - 它只是不在CLR引用属性上,而是在与CLR平行的EntityReference属性上参考实体。它的名称与CLR参考文件相同,但加上了“参考”一词。所以,你可以说:

currentRole.SiteReference.Load(); 

对于它的价值,在VS 2010/.NET 4.0版本的EF,它也将有可能设置在ObjectContext的一个属性,它会变成隐懒加载等等访问clr引用将自动加载它,如果它尚未被加载。

Danny

+2

是的,如果(!BlaahReference.IsLoaded)BlaahReference.Load();在我的代码中调用越来越烦人..我很高兴他们正在为此添加隐式支持。 – misteraidan 2009-05-22 00:24:09