EF Core:渴望加载(.Include)子类别(自参考)

2024-02-10

我们有这样的东西

var categories = _context.Categories.Include("Categories1.Categories1.Categories1");

它可以工作并处理高达 4 级深度的子​​类别(这对于现在来说已经足够了,但谁知道未来呢)

有更好的方法吗?

更多信息

我们使用数据库优先。类别表包含以下列:

  • Id
  • ParentCategoryId

在这种特殊情况下,我认为递归属性可能是一个不错的选择。尝试从记忆中做到这一点(已经好几年了),性能不会很好。没有延迟加载和显式加载。

public class Category {
    public int Id {get; set;}
    // other stuff
    public List<Category> MyChildren {
        get { return _context.Categories.Where(x => x.ParentCategoryId == Id).ToList<Category>(); }
    } 
}

这将为您提供一个从给定节点开始的层次图。

var justOne = _context.Categories.FirstOrDefault(x => x.Id = <myval>);

缺点是您必须递归地解析/使用结果,并且结果可能呈指数增长。

澄清:EF 不允许在递归中使用 _context,其用于说明目的。在存储库/UoW 或业务层中,您可以使用相同的技术通过具有递归调用该方法的方法的属性来“组装”完成的实体。

只是为了好玩,这里有相同的递归技术(但不是作为属性,现在没有时间)。

public class Category       // EF entity
{
    public int Id { get; set; }
    public int ParentId { get; set; }
    public virtual List<Category> MyChildren { get; set; }
}
public static class MVVMCategory
{
    public static Category GetCategory(int id)
    {
        Category result = _context.Categories.FirstOrDefault(x => x.Id == id);

        result.MyChildren = GetChildren(id);

        return result;
    }

    public static List<Category> GetChildren(int id)
    {
        List<Category> result = _context.Categories.Where(x => x.ParentId == id).ToList<Category>();
        foreach (var item in result)
        {
            item.MyChildren = GetChildren(item.Id);
        }
        return result;
    }
}

需要注意的一件事。我将 virtual 添加到延迟加载列表中,因为可以说我是“手动”加载子项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EF Core:渴望加载(.Include)子类别(自参考) 的相关文章

随机推荐

  • C“for”循环中的多个条件

    我遇到了这段代码 我通常使用 或 将多个条件分开for循环 但此代码使用逗号来执行此操作 令人惊讶的是 如果我改变条件的顺序 输出就会改变 include
  • freemarker跳过assertNotNull InvalidReferenceException

    我使用 freemarker 渲染对象列表 ul lt list publication as item gt li b item key b item value li ul 但有些项目的 item value null 会引发异常 fr
  • Runbook 测试窗格不显示写入输出

    我对自动化是全新的 对 Powershell 也很陌生 所以我希望这是一个简单的修复 我正在尝试让一些代码运行 据我所知 它确实运行了 但测试窗格没有显示任何内容 基于此线程 Azure powershell Runbook 不显示任何输出
  • 从 ionic 应用程序调用本机 Android 应用程序

    我正在开发一个将由 Android 本机应用程序调用的应用程序 我还得给他们打电话 为此我发现这个插件 https github com EddyVerbruggen Custom URL scheme 他们将按照以下代码调用我的应用程序
  • 如何实现 dropzone.js 将文件上传到 Amazon s3 服务器?

    请帮助实现 dropzone js 将文件上传到 Amazon s3 服务器 已经参考了以下链接https github com enyo dropzone issues 33 https github com enyo dropzone
  • 如何在Android上从方位角获取罗盘方向

    我必须显示用户指向 Android 设备的方向 我在用Sensor TYPE ACCELEROMETER Sensor TYPE MAGNETIC FIELD获取方位角 俯仰角 横滚角 但我能够弄清楚如何从中获取方向 北 南 东 西 请帮忙
  • eclipse使用什么算法在Serialized类中生成verison id?

    假设这是我的班级 class B implements Serializable private static final long serialVersionUID 5186261241138469827L what algo is us
  • 如何在Java中独立于主线程运行线程?

    目标是能够调用执行单独的线程从内部主班 一些背景 我有一个程序必须运行process 过程 一个cmd 仅当主程序执行完毕并从内存中卸载时才应运行 我应该在其中包含什么代码主班 如果你的意思是 我如何启动一个不会在我的 JVM java 程
  • Google 在 iOS 上设置自动完成功能 - 无法加载搜索结果 - 请重试

    我在这里发布这个是因为我不知道还能在哪里发布这个 今天 我们的应用程序不再返回 Google Places API 的结果 我们看到该请求在 Google 开发者控制台上得到通过 但所有手机均未返回任何结果 今天这个数字还在攀升 并且每个用
  • 比较两个指针是否相等的二叉搜索树遍历

    我正在阅读 Cormen 算法书 二叉搜索树章节 它说有两种无需递归即可遍历树的方法 使用堆栈和 更复杂但更优雅 不使用堆栈的解决方案 但 假设两个指针可以 测试平等 我已经实现了第一个选项 使用堆栈 但不知道如何实现后者 这不是作业 只是
  • Ruby 流 tar/gz

    基本上我想将内存中的数据流式传输为 tar gz 格式 可能将多个文件传输到 tar 中 但它永远不应该接触硬盘 只能流式传输 然后将它们流式传输到其他地方 在我的例子中是 HTTP 请求体 有人知道现有的图书馆可以做到这一点吗 Rails
  • 如何清理 if else 系列

    在C 中工作 想要减少if else系列 实体有两个属性FromServiceID and ToServiceID 假设我的ServiceClass实例有以下信息 如何清理以下代码 任何类型的建议都可以接受 entity new Servi
  • 使用 PHP GD 合并两个图像 (.JPG)

    我找不到解决方案 我想给这张图片添加 20px 的空白 http img233 imageshack us img233 419 78317401 jpg http img233 imageshack us img233 419 78317
  • 如何在 python 中使用列表理解来展平多个列表

    我目前有多个由内部列表组成的列表 我已经找到了如何使用列表理解来展平列表 但是如何在不重复使用同一行代码的情况下做到这一点 这是一个示例代码 first 1 2 3 4 5 6 7 8 9 second 3 5 6 0 3 4 third
  • WTSSendMessage 不在远程桌面上显示消息框

    我有一个 Windows 服务应用程序 它显示确认弹出窗口以进行进一步操作 当我在本地计算机上安装服务应用程序时 它工作正常 但当我将其安装在远程计算机上时 不会显示确认弹出窗口 DllImport Kernel32 dll SetLast
  • 如何加快 Amicable 数字算法的速度?

    完成 100 000 的 limit n 需要相当长的时间 我怀疑问题出在计算友好 数字越大 计算时间就越长 我可以改变什么来使其速度比这更快 public static void Main string args CheckAmicabl
  • 多线程访问ArrayList

    我有一个 ArrayList 用于缓冲数据 以便其他线程可以读取它们 该数组不断地添加数据 因为它是从 udp 源读取的 而其他线程不断地从该数组读取数据 然后从数组中删除数据 这不是实际的代码 而是一个简化的示例 public class
  • 如何从裁剪后的图像中找到原始图像

    Hei guys I want to do a application regarding image processing but I dont know what to read first The ideea is that I wa
  • 为什么在二维缩放变换过程中文本变得模糊和摆动

    我想让这张卡在悬停时缩放 包括其中的元素 但文本在转换过程中 当您悬停卡时 摆动 抖动 并且在缩放期间和之后变得模糊 有时 某些比率比其他比率更大 我认为这是由于子像素值舍入所致 如何消除转换过程中的晃动和模糊 我不关心 IE 浏览器 我只
  • EF Core:渴望加载(.Include)子类别(自参考)

    我们有这样的东西 var categories context Categories Include Categories1 Categories1 Categories1 它可以工作并处理高达 4 级深度的子 类别 这对于现在来说已经足够