为什么 EF Core 一对多关系集合返回 null?

2024-05-16

这可能看起来像一个重复的问题EF Core 一对多关系列表返回 null https://stackoverflow.com/questions/55210832/ef-core-one-to-many-relationship-list-returns-null,但这个问题的答案对我没有帮助。我的情况:

public class Section
{
    public int Id { get; set; }
    // ...
    public IEnumerable<Topic> Topics { get; set; }
}

public class Topic
{
    public int Id { get; set; }
    // ...
    public int SectionId { get; set; }
    public Section Section { get; set; }
}

但我还没有实施OnModelCreatingDbContext 中的方法,因为在这种情况下,用户身份会发生错误。数据库中存在具有指定SectionId 的主题。但无论我如何尝试获取该部分,我都会在Topics财产。例如:

var section = _dbContext.Sections.Include(s => s.Topics).FirstOrDefault(s => s.Id == id);

出现这个问题的原因是什么?我声明有什么错误吗?或者创建主题时出现问题?

UPDATE

我试图覆盖OnModelCreating方法如下:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Section>()
    .HasMany(s => s.Topics)
    .WithOne(t => t.Section);

    base.OnModelCreating(modelBuilder);
}

这样:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Section>()
    .HasMany(s => s.Topics)
    .WithOne(t => t.Section)
    .HasForeignKey(prop => prop.SectionId);

    base.OnModelCreating(modelBuilder);
}

我还再次将虚拟属性添加到依赖项中。这没有帮助。添加了测试迁移(以为数据库结构可能有问题),但是迁移是空的。

SOLUTION

结果我拄着拐杖解决了这个问题:

var section = _dbContext.Sections.Include(s => s.Topics).FirstOrDefault(s => s.Id == id);

if (section == null)
{
    return Error();
}

section.Topics = _dbContext.Topics.Where(t => t.SectionId == section.Id).Include(t => t.Author).ToList();

foreach(var topic in section.Topics)
{
    topic.Author = _dbContext.Users.FirstOrDefault(u => u.Id == topic.AuthorId);
    topic.Posts = _dbContext.Posts.Where(t => t.TopicId == topic.Id).ToList();
}

正如您所看到的,我必须显式地从 dbContext 获取数据并将它们分配给适当的属性。Include方法调用可以被删除,因为它们不执行所需的操作。


按照此链接上的指南进行操作https://www.learnentityframeworkcore.com/lazy-loading https://www.learnentityframeworkcore.com/lazy-loading

  1. 安装Microsoft.EntityFrameworkCore.Abstractions打包到包含模型类的项目中:
    [Package Manager Console]
    install-package Microsoft.EntityFrameworkCore.Abstractions

    [Dotnet CLI]
    add package Microsoft.EntityFrameworkCore.Abstractions
  1. 更改主要实体以包括
  • a using指令Microsoft.EntityFrameworkCore.Infrastructure
  • 的一个字段ILazyLoader实例
  • 一个空的构造函数,以及一个需要ILazyLoader作为参数(如果您愿意,可以是私有的)
  • 集合导航属性的字段
  • 公共财产中的吸气剂,使用ILazyLoader.Load method
using Microsoft.EntityFrameworkCore.Infrastructure;

public class Author
{
    private readonly ILazyLoader _lazyLoader;

    public Author()
    {
    }

    public Author(ILazyLoader lazyLoader)
    {
        _lazyLoader = lazyLoader;
    }

    private List<Book> _books;

    public int AuthorId { get; set; }

    public List<Book> Books
    {
        get => _lazyLoader.Load(this, ref _books);
        set => _books = value;
    }
}

答案中的解决方案在多对多关系的情况下不起作用。

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

为什么 EF Core 一对多关系集合返回 null? 的相关文章

  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 按成员序列化

    我已经实现了template
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 直接选择排序与交换选择排序

    有什么区别直接选择排序 vs 交换选择排序 今天我陷入了一场争论 我的教授在他的讲义中使用了这两个术语 维基百科和任何教科书或网站都会为您提供的选择排序就是他所说的 交换选择排序 我以前从未听说过 交换选择排序 这个术语 仅 选择排序 并且
  • 如何在应用程序项目中使用 Cocoa Touch 框架

    我熟悉构建单个 iOS 应用程序 但我坚持使用 Cocoa Touch 框架向多个应用程序共享通用代码 问题 框架的头文件不可见 无法链接到消费应用程序项目 我做了什么 1 我创建了一个名为 libTestFramework 的项目 Coc
  • Powerquery:展开其中有记录的所有列

    使用 Microsoft Excel 2013 中的 Power Query 我创建了一个如下所示的表 To insert this in Power Query append a before the Table FromRows Tab
  • 证明 Excel VBA Scripting.Dictionary 不保留项目插入顺序

    我正在尝试决定是否为我的项目使用 Excel VBA 集合或字典 出于多种原因 我倾向于字典 但在使用字典时我会继续阅读它For Each循环检索字典项目或从字典 Items 数组读取项目时 检索顺序可能不是添加项目的顺序 这对于我的应用程
  • $().load() 不是加载整个页面,而是需要在所有页面上保留菜单

    我想使用 jQuery AJAX 重新加载我网站的内容区域 load 功能 但我的问题是header and footer无论您的入口 URL 为何 都需要在所有页面上显示 我的网站是使用模板构建的 所以我的第一个想法是删除独特内容上方和下
  • 在Python中循环命名元组的元素

    我有一个命名元组 我将值分配给这样的 class test object self CFTs collections namedtuple CFTs c4annual c4perren c3perren ntfixing self CFTs
  • 什么时候需要“typename”关键字? [复制]

    这个问题在这里已经有答案了 可能的重复 正式来说 typename 是做什么用的 https stackoverflow com questions 1600936 officially what is typename for 我必须在哪
  • 为每个因素级别添加日期时间序列

    我有一个带有因子列的数据框 s lt data frame id 901 910 s id lt as factor s id 我有一个日期时间序列 library lubridate start lt now as difftime 2
  • 如何使用gunicorn和bokeh服务配置Nginx

    我想提供一个 Flask 应用程序 该应用程序使用本地网络服务器上的嵌入式散景服务 为了说明这一点 我使用了一个例子散景服务示例 https github com bokeh bokeh blob 0 12 11 examples howt
  • 由于重复捕获组而不是捕获重复组,正则表达式不匹配

    我有以下正则表达式 A G A G 具有以下表达式 A BsCb 我期望 3 个匹配结果 A Bs Cb 但测试在https regex101 com https regex101 com 只给我最后一场比赛Cb 并告诉我重复捕获组只会捕获
  • 如何从@google-cloud/storage读取文件?

    我正在从我的存储桶中检索文件 我收到该文件并想要阅读其内容 但我不想将其下载到我的本地项目 我只想读取内容 获取数据并用它进行其他操作 我的代码 export const fileManager async gt try const sou
  • 3D 网格之间的豪斯多夫距离

    我有多个网格 numpy 数组 Nk Ny Nx 并且想使用 Hausdorff 距离作为这些网格相似性的度量 scipy 中有几个模块 scipy spatial distance cdist scipy spatial distance
  • jsf 2.0 中看不见的注释? [复制]

    这个问题在这里已经有答案了 是否可以在我的 xhtml 文件中嵌入注释 这些注释仅显示在源代码中 而不显示在渲染结果中 我想在文件中包含作者 日期 但最终用户在生成的输出中不应该看到它们 如果我使用标准评论标签浏览器显示它们 将以下内容添加
  • StringComparison.InvariantCultureIgnoreCase 去哪儿了?

    我正在将 C 代码移植到 Windows 应用商店应用程序 令我惊讶的是 以下代码不再起作用 someString Equals someOtherString StringComparison InvariantCultureIgnore
  • 如何使用 hibernate 标准查询将两个属性连接成一个属性

    例如 有 2 个房产的门牌号和密码 我想要一个房产作为地址 例如门牌号是 10 pincode 是 110064 组合地址属性是 10 110064 这是我的代码 final Criteria criteria getDatabaseSes
  • Nginx merge_slashes 重定向

    我在我的 Java 应用程序中使用 nginx 我的问题是 nginx 正在合并斜杠 我无法将我的网站重定向到正确的版本 例如 http goout cz cs koncerty praha 被合并到 http goout cz cs ko
  • 将 FragmentContainerView 与导航组件一起使用?

    更新为导航后2 2 0 beta01 https developer android com jetpack androidx releases navigation 2 2 0 beta01从以前的版本开始 lint 会发出有关替换的警告
  • 如何在 SQL Server 中保持数据行内

    我正在尝试找出如何检测数据是否在VARCHAR n SQL Server 2008 中的列存储在行内或行外 有谁知道如何做到这一点 另外 如果我们需要数据 有没有办法将数据保持在行中 要查看某个值是行内还是行外 您可以使用DBCC PAGE
  • Word通过vba宏删除tabe列出现错误

    我想将excel中的数据复制到word表中 然后从表中删除一些列 我可以将数据复制到表中 但是当我删除列时会出现错误 无法访问此集合中的各个列 因为该表具有混合的单元格宽度 我的代码 Public Tbl1 As Table Sub cal
  • 为什么 EF Core 一对多关系集合返回 null?

    这可能看起来像一个重复的问题EF Core 一对多关系列表返回 null https stackoverflow com questions 55210832 ef core one to many relationship list re