在实体框架中创建嵌套实体的层次结构

 噬灬魂鴒 发布于 2023-01-31 19:55

我正在尝试在实体框架中创建一个分层表示,在搜索之后我似乎找不到很多关于这个主题的内容.

前提:我正在开发一个反向链接监控工具,我可以在其中粘贴一堆URL以查看它们是否指向特定域.如果是这样,我想从列表中删除它们并将它们存储为顶级(第1层)反向链接.找到并删除直接链接到URL的所有反向链接后,我想运行列表中剩余的反向链接,看看它们是否指向新创建的顶级反向链接列表中的任何URL,以及指向顶级反向链接的那些,将它们存储为第2层反向链接.然后搜索第3层反向链接,依此类推,直到检查完整个列表.

我有一个网站实体,其中包含用于第一次运行导入反向链接列表的Url.找到的那些被移动到列表中,并且在第二次循环时使用它们的URL,依此类推.

我最初在网站实体中为链接的每个"层"创建了一个单独的属性,但这似乎不是非常有效,因为在尝试渲染层次结构时,代码必须循环遍历每个层并重新匹配URL从下面的层重新创建实际的链接结构.

最终目标样本:

链接层次结构

所以我相信我应该创建一个单独的"反向链接"模型,并让每个反向链接实体存储其下面的反向链接列表,然后在尝试查看反向链接层次结构时,只需执行一个简单的循环,并遍历每个子链接反向链接实体.

反向链接实体的示例如下:

public class Backlink
{
    public int BacklinkID { get; set; }
    public string Url { get; set; }
    public string AnchorText { get; set; }
    public string LinksTo { get; set; }

    public int PageAuthority { get; set; }
    public int PageRank { get; set; }

    public virtual ICollection Backlinks { get; set; }
}

我编写了实际经过的代码并检查每个反向链接的HTML,以查找反向链接是否指向每个特定的URL,所以现在我试图找出存储结果的最佳方法.

创建一个存储同一类型实体列表的实体是一种智能方法,还是我认为这一切都错了?以这种方式做某事会在查询数据库时损害性能吗?

理想情况下,我想使用延迟加载并首先只显示顶层反向链接,然后在点击特定反向链接时,让EF再次调用以获取子反向链接等等 - 这样的存储方法也是如此延迟加载是聪明的,还是我应该废弃这个想法,并为此找出一个完全不同的架构?

我对EF并不擅长,所以任何有关最佳方法的见解都会受到高度赞赏.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有