C# 首先获取依赖实体时无法访问主体实体

C# 首先获取依赖实体时无法访问主体实体,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,我正在尝试配置多对一关系的反向。看起来是这样的: 依赖的是文档邮件 公共类文档邮件:IJob { public int DocumentationOrderId{get;set;} 公共虚拟文档顺序文档顺序{get;set;} } 主要是文件订单 公共类文档顺序 { public int DocumentationOrderId{get;set;} 公共虚拟ICollection邮件{get;set;} } 此模式与Microsoft的模式相匹配 它用于获取DocumentationOrde

我正在尝试配置多对一关系的反向。看起来是这样的: 依赖的是文档邮件

公共类文档邮件:IJob
{
public int DocumentationOrderId{get;set;}
公共虚拟文档顺序文档顺序{get;set;}
}
主要是文件订单

公共类文档顺序
{
public int DocumentationOrderId{get;set;}
公共虚拟ICollection邮件{get;set;}
}
此模式与Microsoft的模式相匹配

它用于获取DocumentationOrder及其依赖项,如下所示:

/\u上下文是工作数据库上下文
_context.DocumentationOrders.First().Mails.First().DocumentationOrder;
尽管这是一个重复,因为它获取相同的
文档顺序
两次,但效果很好

但是,当首先获取
DocumentationMail
时,我总是将
null
作为以下内容的值:

\u context.DocumentationMails.First()//这很好用
_context.DocumentationMails.First().DocumentationOrder//这不管用
我已经尝试过的步骤:

  • 确保数据库记录根据所需关系匹配
  • 我胡乱摆弄着手动配置,没有得到想要的结果
  • 将问题缩小到几行代码
EntityFramework是否支持先获取依赖项,然后获取主体?如果没有,我如何解决这个问题?如果是,具体说明在哪里


提前感谢。

默认情况下,EF Core不会加载导航项目。 您可以使用不同的方法,它们都在这里讨论

我建议使用延迟加载:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseLazyLoadingProxies()
        .UseSqlServer(myConnectionString);
(需要nuget软件包Microsoft.EntityFrameworkCore.Proxies)

尝试使用
Include()
thenclude()
。您的代码如下所示

context.DocumentationOrders
    .Include(do => do.Mails)
        .ThenInclude(mail => mail.DocumentationOrder)
    .First()
    .Mails.First()
    .DocumentationOrder;

我收到一条警告,在
\u context.Mails.First().Include(m=>m.DocumentationOrder.First()上未定义Include
。您必须在
First()之前使用
包含
。你们可以知道我在回复中发布的确切代码。谢谢。但是,这会在序列化为JSON时增加问题。这是一个已知的问题,您应该将DTO序列化为JSON,而不是DB模型。这是用于将DB模型映射到DTO的最常用的.net库