在获取父实体 EFCore 时加载子实体

2023-11-27

我有以下模型。在使用 find 方法从数据库中获取数据时,用子实体加载父实体的更好方法是什么?

父实体:

public class Client
{
    public int Id { get; set; }

    public string LastName { get; set; }

    public string Gender { get; set; }

    public DateTime DateOfBirth { get; set; }

    public Address Address { get; set; }
}

子实体:

public class Address
{
    public int Id { get; set; }

    public string FirstLine { get; set; }

    public string SecondLine { get; set; }

    public string Province { get; set; }
}

现在,当我尝试使用 Find 方法获取数据时,我得到的地址实体为 null,但是当我检查子表中该 ID 的数据库数据时也存在。

referenceContext.Clients.Find(client.Id);

有办法克服这个问题吗?当我获取父对象时,同时子实体的值也随父实体一起加载。

注意:到目前为止,如果我使用Include(i => i.Address)然后,然后,只有我能够加载子实体。

我已经使用了“包含”,但是如果我获取父实体,是否存在其他选项来加载子实体。

referenceContext.Clients.Where(c => c.IsActive.Equals(true))
                        .Include(i => i.Address).ToList();

DB Deatils


如你所说:

注意:到目前为止,如果我使用包含(i => i.地址)然后,然后,只有我能够加载子实体。

是的!这是在 EF Core 中加载相关数据的最佳方式。

你还说:

我已经使用了“包含”,但是如果我获取父实体,是否存在其他选项来加载子实体。

是的!有!它被称作延迟加载。要启用延迟加载,您必须设置导航属性virtual如下:

public class Client
{
    public int Id { get; set; }

    public string LastName { get; set; }

    public string Gender { get; set; }

    public DateTime DateOfBirth { get; set; }

    public virtual Address Address { get; set; } // <-- Here it is
}

并且你必须注册你的DbConext如下:

services.AddDbContext<BloggingContext>(
    b => b.UseLazyLoadingProxies() // <-- Here is it is
          .UseSqlServer(myConnectionString));

UseLazyLoadingProxies()方法可在Microsoft.EntityFrameworkCore.Proxies努吉特包。

注意:您无法禁用特定查询的延迟加载。所以使用预加载是在 EF Core 中加载相关数据的最佳方式。

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

在获取父实体 EFCore 时加载子实体 的相关文章

随机推荐

  • 在 hbase shell 上执行 ValueFilter 或 ColumnFilter

    谁能告诉我如何从 hbase shell 命令行执行限定符过滤器或 ValueFilter 它与使用任何编程语言进行编码的方式非常相似 例如 import org apache hadoop hbase filter CompareFilt
  • Hadoop mapReduce 如何在 HDFS 中仅存储值

    我用它来删除重复的行 public class DLines public static class TokenCounterMapper extends Mapper
  • 字符串池行为

    我读了这个关于Java字符串池的问题并了解字符串池的基本概念 但仍然不了解其行为 第一 如果直接赋值并且 s1 和 s2 都引用池中的同一个对象 它就可以工作 String s1 a bc String s2 ab c System out
  • 阻止元素参与文本选择

    我有一些源代码 pre code 行号在单独的 div 选择文本后 行号会随之出现 并随后被复制 即使我选择源代码块上方和下方的元素 是否有任何方法可以防止行号成为选择的一部分 为了那些关闭 JavaScript 的人的利益 我想避免使用
  • System.arrayCopy 很慢

    我一直在尝试测量 System arrayCopy 与 Arrays copyOf 的性能 以便正确选择其中之一 只是为了基准测试 我还添加了手动复制 结果令我惊讶 显然我错过了一些非常重要的东西 你能告诉我它是什么吗 实现如下 见前4种方
  • 为什么长长联合成员的对齐比包含的联合/结构更大?它是否正确?

    From 这个问题人们可能会开始相信 一个联盟的联盟不小于其单个成员的最大联盟 但我有一个问题long long输入 gcc g 完整的例子可以找到here 但以下是我的问题的相关部分 union ull long long m struc
  • C# 加权随机数

    我需要游戏编程方面的帮助 你打开一个箱子 并以给定的概率找到一个物品 物品 机会 A 10 B 30 C 60 Random random new Random int x random Next 1 101 if x lt 11 Numb
  • Ruby 拒绝正确划分

    我只是想得到一个百分比 irb main 001 0 gt 25 50 100 gt 0 正如我的计算器所证实的那样 这绝对应该等于 50 将相同的方程复制并粘贴到 gcalc 中 为什么 Ruby 拒绝这样做 它正在做整数除法 基本上 2
  • LINQ 列表到句子格式(插入逗号和“and”)

    我有一个 linq 查询 它执行一些简单的操作 例如 var k people Select x gt new x ID x Name 然后我想要一个函数或 linq lambda 或者使用逗号和 and 以句子格式输出名称的东西 1 Jo
  • 程序完成后分支预测器条目失效?

    我试图了解分支预测器条目何时无效 以下是我所做的实验 Code1 start measure branch mispred while X times if something something do useless endif endw
  • 如何将 JavaFX 2 中场景图形的内容输出到图像

    如何输出a的内容SceneJavaFX 2 中的图表到Image 事实上 我正在开发一个应用程序 它基本上是设计卡片的 因此 用户只需单击各种选项即可自定义场景 最后我想将场景内容导出到图像文件 我怎么做 在 FX 2 2 中出现了新的快照
  • 从 Xamarin Android 上的另一个 Activity 启动一个 Activity

    我发现这个 java 代码可以创建一个通用方法来从其他活动启动任何活动 public void gotoActivity Class activityClassReference Intent i new Intent this activ
  • 如何通过点击html元素获取xpath

    我对编程很陌生 必须在单击 html 元素时生成 Xpath 例如 如果我单击了用户名的文本框 那么它应该给我类似的 xpath html head body tr 1 table 2 等等等等 最主要的是我不能使用 firebug 因为我
  • 我可以检查现在是否有 UIAlertView 显示吗? [复制]

    这个问题在这里已经有答案了 我可以在 iOS 应用程序的任何部分检查当前是否显示 UIAlertView 吗 我找到了这段代码 NSClassFromString UIAlertManager performSelector selecto
  • ASP.NET MVC 从数据库加载 Razor 视图

    ScottGu 提到我们应该能够从数据库加载 Razor 视图 查看评论部分 那么有人有关于如何做到这一点的示例吗 Thanks 您可能想检查从数据库而不是文件中提取视图 or 使用 VirtualPathProvider 从 DLL 加载
  • Android - 如何使用包名称启动第三方应用程序?

    我想知道如何使用包名称从我的应用程序启动另一个应用程序 我有字符串格式的包名称 例如 String pkgName com example appName 这就是为什么我无法从中获取类名或任何其他有价值的详细信息 我可以用它们来做出正确的意
  • 休眠实现。我们是否付出了反思代价?

    很久以前 我正在使用反射创建一个迷你 ORM 在阅读有关反射的内容时 我得到了类似的答案 Java 反射性能 这是完全有道理的 我退出了我的迷你 orm 并锐化了我的 CTRL C CTRL V 键 该库的目的是避免在我正在开发的网络应用程
  • 评估在 C# 中使用扩展方法的成本/收益 => 3.0 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 在什么情况下 使用场景 您会选择编写扩展而不是对对象进行子类化 我发现扩展方法的想法 很酷 显然你可以用它们做 遥远 的事情 就像 Mitsu Furota MS 博客文章中的许多例子一样
  • 使用 Eclipse 在 Windows 上分析 C 代码

    我知道我可以分析我的代码gprof and kprof在 Linux 上 Windows 上是否有与这些应用程序类似的替代方案 商业软件 Rational Quantify 昂贵 缓慢 但非常详细 AQTime 更便宜 更慢 有点详细 免费
  • 在获取父实体 EFCore 时加载子实体

    我有以下模型 在使用 find 方法从数据库中获取数据时 用子实体加载父实体的更好方法是什么 父实体 public class Client public int Id get set public string LastName get