微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何仅使用一次循环引用在层次结构中加载实例?

| 我有一个这样的对象结构:
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包含有关父实例和子实例的所有信息,我想在父级和组成该关系的所有子实例上共享相同的Relationship实例。 现在,当我从数据库中加载我的实体时,我从顶层实体开始,然后顶层实体加载关系。我以为我可以缓存正在建立的关系,并为孩子重用同一实例。但这无法创建关系,因此我需要加载所有子实体,因此每个子实体都尝试重新创建当前创建子实体时要使用的同一个关系,因此最终创建在将关系添加到缓存之前,我会在树中找到我下面的所有关系实例。 有没有一种方法可以解决这个问题,而不必使子级成为我的关系的可设置属性,因此我可以在创建子级之前创建对关系的引用?     

解决方法

因此,我通过引入RelationshipBuilder类来解决此问题,该类用于跟踪关系的父母和子女,而无需实际创建它。 当关系尝试创建子对象时,我便可以在构建器中加载实体并创建其关系,他们与构建器进行了检查,以查看该关系已被创建并返回。 这意味着我可以一直沿层次结构向下导航,以加载所有实体实例并设置与关系相关联的父实体和子实体。一旦所有实体都已加载并且递归完成,我们就返回到开始加载实体的入口点,我请关系构建器解析所有关系。然后,这将创建已通知的每个关系,并在该关系中涉及的父实例和子实例上设置该关系实例。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。