实体框架 - 延迟加载或附加异步/等待查询方法?

2024-04-22

我有这些领域模型

public class Topic
{
    public int TopicId { get; set; }

    public virtual ICollection<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }

    public int? TopicId { get; set; }
    public virtual Topic Topic { get; set; }
}

例如,我想实现 TestAsync 方法,在那里我想使用 Topic 对象和相关的 Posts 对象。

我可以使用异步方法和 topicId 作为参数来获取主题模型。

public async Task<bool> TestAsync(int topicId)
{
    var topic = await topicService.GetByIdAsync(topicId);

    // posts ...
}

我有两种方法,如何获取相关帖子。 但是,如果我使用 LazyLoading 或只是另一个异步查询,有什么区别?

// Example: 1 (LazyLoading)
var posts = topic.Posts;

// OR Example: 2 (Async method)
var posts = await postService.GetAllByTopicIdAsync(topicId);

因此,我认为示例:1 将同步工作,而且我失去了 async/await 代码的所有优点。 但示例:2让我想,这可能是我不知道延迟加载的所有魅力:) 谁能澄清我应该使用什么解决方案以及为什么?谢谢:)


延迟加载总是同步的,这是不幸的。例如,EF Core 以其异步优先的心态,目前还不支持延迟加载。

其他选项包括按照 Peter 建议进行连接(预加载),异步执行单个查询;或者执行显式的第二个异步查询。您选择哪一个取决于您的模型通常如何使用。

就我个人而言,如果模型始终一起使用,我会选择执行预先加载,否则执行多个异步查询。我自己不使用延迟加载,尽管没有什么可以阻止它工作。

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

实体框架 - 延迟加载或附加异步/等待查询方法? 的相关文章

  • 如何在 C# 中读取 Visio 文档内容

    我的DLL库代码如下 using System using IVisio Microsoft Office Interop Visio namespace Emix public class Visio protected String p
  • 使用 JSON.NET 反序列化一些 JSON

    我对 JSON 非常陌生 我需要解析 API 提供的一些内容 谷歌快速搜索出现了JSON NET http james newtonking com pages json net aspx 所以我现在尝试使用它将此 JSON 解析为列表对象
  • 函数类型有什么用?

    鉴于以下两个typedefs typedef void pftype int typedef void ftype int 我明白第一个定义pftype作为指向一个函数的指针 该函数接受一个int参数并且不返回任何内容 第二个定义ftype
  • 程序每次运行都会生成相同的随机数? [复制]

    这个问题在这里已经有答案了 我刚刚完成扫雷类型游戏的编码 一切都很好 除了每次运行该应用程序时 它都会生成相同的数字 我运行了 3 次不同的时间 将输出保存到 3 个文本文件并使用diffLinux 中的命令 没有发现任何差异 它的种子是t
  • 如何在 xamarin.forms 中隐藏列表视图的空行

    我有一个StackLayout with a ListView我有一个添加按钮 我想将其显示在ListView 但是ListView显示许多未使用的行 只是空行 这迫使我的按钮显示在页面底部 我一直在搞乱VerticalOptions一整天
  • 从通用列表中删除项目

    我有以下方法 我希望从我的收藏中删除与产品 ID 匹配的项目 看起来相当简单 但我有一个例外 基本上我的收藏已经不同步了 那么从集合中删除项目的最佳方法是什么 public void RemoveOrderItem Model Order
  • `printf()` 中格式说明符“%qd”的用途是什么?

    我看到格式说明符 qd浏览时github https github com Microsoft clang blob master test Sema format strings c代码 然后我检查了 GCC 编译器 它工作正常 incl
  • recvfrom() 中的 addrlen 字段有何用途?

    我在程序中使用 recvfrom 从我在 src addr 中指定的服务器获取 DGRAM 数据 但是 我不确定为什么需要初始化并传入addrlen 我读了手册页 但不太明白它的意思 如果src addr不为NULL 并且底层协议提供了源地
  • 为什么 C 和 C++ 编译器在函数签名中允许数组长度,但从未强制执行?

    这是我在学习过程中发现的 include
  • eclipse-cdt如何链接静态库

    首先 我很困惑应该在链接器 库下设置库还是将它们设置在 路径和符号 下 我认为它们是一样的 我对么 对于我的问题 我需要链接静态库 所以我尝试了一些方法 第一次尝试我尝试在链接库中添加gtest 这是库 和gtest路径 通过这种方式 它的
  • HttpClient 响应未刷新

    我正在使用 HttpClient 与 Web 服务进行通信以进行发送 接收 JSON 格式的响应 但我在接收数据时遇到一些问题 我每 5 分钟调用一次 Web 服务 使用 HttpClient 刷新 Windows Phone 上的内容 但
  • 重复的 AssemblyVersion 属性

    我有一个项目在编译时生成以下错误 错误 CS0579 重复的 AssemblyVersion 属性 我已经检查过文件AssemblyInfo cs看起来那里没有重复 I found MSDN 上的这篇文章 http social msdn
  • Find() 的 Javascript 代码优化

    我有 C 代码 可以在 SQL 中运行查询并返回大约 2000 行 然后创建一个Treeview控件并添加到我的主页 这几乎是立即完成的 这很好 var orgId select name ctl00 PageContent Functio
  • 对常量数组的未定义引用

    a cpp const unsigned char whatever 123 a h extern const unsigned char whatever 123 b cpp include a h unsigned char x wha
  • 使用 .NET SDK / C# 在 StarTeam 中查找文件的过去修订版本

    我正在尝试编写一个 C 程序来比较 StarTeam 存储库中不同版本的文件 查看文件的当前版本与给定的先前签入之间是否有任何更改 我目前能够从当前版本中查找 签出文件 但很难找到正确的方法来查找这些文件的过去版本 至少在 NET 方面 B
  • 通过 std::function 进行函子引用

    基本上 我希望有以下语义 include
  • 无法访问类“std::basic_ios<_Elem,_Traits>”中声明的私有成员

    此特定方法有问题 不知道如何解决 我收到的错误是上面的 错误 C2248 std basic ios basic ios 不能 访问类中声明的私有成员 std basic ios C Program Files Microsoft Visu
  • 随机无效视图状态错误

    我知道关于这个主题有很多问题 我已经阅读了所有这些问题 我正在使用 IIS8 Net 4 5 用户随机收到无效视图状态错误 我无法弄清楚 一旦发生这种情况 他们返回网站的唯一方法就是清除浏览器缓存 在我的 web config 中我有
  • C 编程:正向变量参数列表

    我正在尝试编写一个函数 它接受可变数量的参数 如 printf 执行一些操作 然后将变量列表传递给 printf 我不知道如何做到这一点 因为它似乎必须将它们推入堆栈 大约是这样的 http pastie org 694844 http p
  • ref 关键字如何工作(就内存而言)

    C 有一个ref https msdn microsoft com en us library 14akc2c7 aspx关键词 使用 ref 可以通过引用将 int 传递给方法 当您调用通过引用接受 int 的方法时 堆栈帧上会发生什么

随机推荐