【问题标题】:Entity Framework: Loading Many to One entity实体框架:加载多对一实体
【发布时间】:2009-02-08 22:28:01
【问题描述】:

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

Site.Roles.Load()

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

currentRole.Site //????

因此,当加载角色时,Site 为 null,除了查询角色集合以获取 SiteID、从站点集合中获取站点并最终设置之外,没有其他方法可以获取站点到 currentRole 的网站属性。

一定有更好的方法吗?我是否必须强制在查询中加入某种形式?似乎这将由代码生成,就像 Load 方法的行为一样。

【问题讨论】:

    标签: .net linq-to-sql entity-framework


    【解决方案1】:

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

    currentRole.SiteReference.Load();
    

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

    丹尼

    【讨论】:

    • 是的 if(!BlaahReference.IsLoaded) BlaahReference.Load();我的代码中的调用变得非常烦人.. 我很高兴他们为此添加了隐式支持。
    【解决方案2】:

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

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

    Here's some documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多