假设我有一个角色实体和一个网站实体.现在,一个站点有许多角色,因此在Role类中有一个表示该关系的Site属性.如果我想要一个网站的角色,我会这样做:
Site.Roles.Load()
问题是,由于Role类上的Site属性不是集合而只是单个实体,因此没有Load方法:
currentRole.Site //????
因此,当加载角色时,站点为空,除了对角色集合进行查询以获取SiteID,从网站集获取站点,最后将其设置为currentRole的站点之外,无法获取站点.属性.
一定有更好的方法?我是否必须在查询中强制某种加入?看起来像这样就会像Load方法一样由代码生成.
实际上,访问它不会自动加载它.您可以使用Include方法将相关实体包含在单个查询中,但您也可以像对集合一样使用带引用的Load方法 - 它不是在CLR引用属性上,而是在与CLR并行的EntityReference属性上关于实体的参考.它的名称与CLR引用相同,但添加了"reference"一词.所以你可以说:
currentRole.SiteReference.Load();
值得一提的是,在EF的VS 2010/.net 4.0版本中,还可以在ObjectContext上设置一个属性,该属性将打开隐式延迟加载,以便访问clr引用将自动加载它,如果它尚未加载.
丹尼