实体框架:将多个实体加载到一个实体

Pro*_*ool 2 .net entity-framework linq-to-sql

假设我有一个角色实体和一个网站实体.现在,一个站点有许多角色,因此在Role类中有一个表示该关系的Site属性.如果我想要一个网站的角色,我会这样做:

Site.Roles.Load()
Run Code Online (Sandbox Code Playgroud)

问题是,由于Role类上的Site属性不是集合而只是单个实体,因此没有Load方法:

currentRole.Site //????
Run Code Online (Sandbox Code Playgroud)

因此,当加载角色时,站点为空,除了对角色集合进行查询以获取SiteID,从网站集获取站点,最后将其设置为currentRole的站点之外,无法获取站点.属性.

一定有更好的方法?我是否必须在查询中强制某种加入?看起来像这样就会像Load方法一样由代码生成.

小智 6

实际上,访问它不会自动加载它.您可以使用Include方法将相关实体包含在单个查询中,但您也可以像对集合一样使用带引用的Load方法 - 它不是在CLR引用属性上,而是在与CLR并行的EntityReference属性上关于实体的参考.它的名称与CLR引用相同,但添加了"reference"一词.所以你可以说:

currentRole.SiteReference.Load();
Run Code Online (Sandbox Code Playgroud)

值得一提的是,在EF的VS 2010/.net 4.0版本中,还可以在ObjectContext上设置一个属性,该属性将打开隐式延迟加载,以便访问clr引用将自动加载它,如果它尚未加载.

丹尼

  • 是啊(!BlaahReference.IsLoaded)BlaahReference.Load(); 我的代码中的调用变得非常烦人..我很高兴他们为此添加了隐式支持. (2认同)