如何只使用循环引用加载层次结构中的实例一次?

时间:2011-04-14 11:14:24

标签: c# .net hierarchy circular-reference

我有一个像这样的对象结构:

public class Entity
{
    IList<Relationship> Relationships{get;set;}
}

public class Relationship
{
    public Relationship(Entity parent, IList<Entity> children)
    {
    //set properties
    }
    Entity Parent{get;private set;}
    IList<Entity> Children{get;private set;}
}

关系包含有关父实例和子实例的所有信息,我想在父实例和构成关系的所有子实例上共享相同的Relationship实例。

现在,当我从db加载我的实体时,我从顶层实体开始,然后加载关系。我以为我可以缓存我正在构建的关系并为子节点重用相同的实例。但这不能创建一个我需要加载所有子实体的关系,所以每个子实体都尝试重新创建我目前正在尝试让孩子们创建之前的相同关系,所以我最终创建所有子实体在我可以将关系添加到缓存之前,我在树下面的关系实例。

有没有一种方法可以绕过这个而不会让孩子成为我的关系的可设置属性,所以我可以在创建孩子之前创建关系的引用?

1 个答案:

答案 0 :(得分:0)

所以我通过引入一个RelationshipBuilder类来管理这个,我用它来跟踪关系的父母和子女,而不实际创建它。

这使我能够加载实体并在构建器中创建关系,当关系尝试创建他们使用构建器检查的子项时,以查看已创建并返回该关系。

这意味着我可以在层次结构中一直导航,加载所有实体实例并设置与关系关联的父实体和子实体。一旦所有实体都已加载并且递归已完成,我们就会返回到我们开始加载实体的入口点,我要求关系构建器解决所有关系。然后,它会创建已通知的每个关系,并在涉及该关系的父实例和子实例上设置关系实例。

相关问题