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//这不管用
我已经尝试过的步骤:
- 确保数据库记录根据所需关系匹配
- 我胡乱摆弄着手动配置,没有得到想要的结果
- 将问题缩小到几行代码
提前感谢。默认情况下,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库