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)子类别(自参考) 的相关文章

  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • 如何使用自定义 DbFunction 将字符串转换为小数

    我有一个将小数 和其他类型 保存为字符串的表 我想在数据库上下文上编写一个 Linq 查询 该查询将转换为数据库转换而不是本地转换 出于性能原因 This 非工作的example 从概念上讲是我想要实现的目标 using var conte
  • 防止更新 ASP.NET MVC 和实体框架中未更改的值

    我正在使用 ASP NET MVC 和实体框架 我有一个 编辑人员 网页 可以在其中编辑人员的字段 然后在回发操作中 我使用以下代码 var person objectCtx Persons Where s gt s Id id First
  • .edmx 文件的用途是什么?

    edmx 文件的用途是什么 阅读 CSDL SSDL 和 MSL 规范 在我看来 edmx 文件仅在设计时使用 我们打算将它与其他 edmx 一起分发吗 看来我们需要分发 ssdl 和 或 csdl 文件 EDMX 是 Visual Stu
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 更新 EF 6 中子实体的正确方法是什么?

    必须有更好的方法来处理 EF 6 中的子保存 更新 当然 这种重复只是我的失败 Entity public partial class MyParentType public MyParentType this children new H
  • 使用实体框架、代码优先方法解决结构问题

    我目前正在使用 EF 和代码优先方法从现有系统构建数据库 最好对 核心 类进行最小的更改 因此 我想找到 Structs 和 EF 的解决方法 是否可以以任何方式将 Struct 包装到类中 以便 EF 可以使用此 Struct 中的数据
  • 非静态方法需要一个目标

    private PMS USERS currUser private bool validateUserName dbContext new PmsEntities var validateUser dbContext PMS USERS
  • EF5 和循环或多级联路径,FOREIGN KEY

    我遇到了一个奇怪的问题 我已经知道为什么通常会发生此异常 以及如何通过在其中一个属性中将 WillCascadeOnDelete 禁用为 False 来解决它 但我的问题似乎是其他类型的 这是我的代码 会员 public class Mem
  • LINQ to Entities 不支持指定的类型成员“UserName”

    我尝试使用 url 中的 id 参数来显示特定用户的图像 但收到以下错误消息 LINQ to 不支持指定的类型成员 UserName 实体 仅初始值设定项 实体成员和实体导航 支持属性 这是我的操作方法 HttpGet public Act
  • 无法将类型 System.Linq.IQueryable 隐式转换为字符串

    我有两个名为 Rank 和 CrewMembers 的表 我想根据 CrewMember 的 id 获取 Rank 表中存在的排名名称 我已将船员 ID 作为参数传递 并在此基础上该方法将返回该特定船员的等级 这就是我的代码 public
  • LINQ to Entities 如何更新记录

    好的 我对 EF 和 LINQ 都是新手 我已经弄清楚如何插入和删除 但由于某种原因更新似乎逃脱了我的掌握 这是我的代码示例 EntityDB dataBase new EntityDB Customer c new Customer Na
  • Entity Framework 6 Code First 迁移 - 用于生产的多个分支

    在我的项目中 我们有一个分支模型 它有一个单独的开发分支 并且每个版本都有一个单独的分支 它可能看起来像这样 dev master r1 r2 因此 我们在 dev 上开发并将其合并到 master 然后创建一个发布分支 r1 r2 我们想
  • 在 MVC3 Razor 视图中引用 EntityFramework 4.1 命名空间

    我试图在我的 MVC3 项目中的共享视图内引用 System Data Entity Validation EF 4 1 版本 命名空间 我已经能够使用以下方式引用其他外部库 using Example Namespace 然而 当涉及到作
  • 在运行时更改实体框架数据库架构

    在大多数 ASP NET 应用程序中 您可以通过在运行时修改连接字符串来更改数据库存储 即 我可以通过简单地更改连接字符串中 数据库 字段的值来从使用测试数据库更改为生产数据库 我正在尝试使用实体框架更改架构 但不一定是数据库本身 但没有成
  • EF 迁移迁移到 0 调用初始创建关闭

    我正在尝试找出将迁移降低到空数据库的语法 就像在初始创建迁移中调用 down 方法一样 有谁知道在迁移中调用 Down 方法的正确语法与此类似 Update Database StartupProjectName Infrastructur
  • 在实体框架中比较日期的最佳方法

    我在实体框架的 where 子句中使用日期并收到以下错误 这是由于以下代码 var entity dbContext MyTable Where w gt w PId 3 w CreatedOn Date mydate Date First
  • 实体框架 5 - 抽象类型“X”没有映射的后代,因此无法映射

    尝试操作时出现以下错误这个对象 https github com gbirchmeier quickfixn blob master QuickFIXn Message FIX44 TradeCaptureReportRequestAck
  • ADO.NET 池连接无法重用

    我正在开发一个 ASP NET MVC 应用程序 该应用程序使用 EF 6 x 来处理我的 Azure SDL 数据库 最近 随着负载的增加 应用程序开始进入无法再与 SQL 服务器通信的状态 我可以看到有 100 个到我的数据库的活动连接
  • 从 SQLCE 4 迁移到 SQL Server 2008

    因此 作为早期采用者 我开发了一个基于 SQLCE4 ASP Net MVC3 和实体框架CTP5 http www microsoft com downloads en details aspx FamilyID 35adb688 f8a

随机推荐

  • 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 级深度的子 类别 这对于现在来说已经足够