C# 如何在第二级加载耦合相关数据?

C# 如何在第二级加载耦合相关数据?,c#,entity-framework,.net-core,C#,Entity Framework,.net Core,我有两个表esfDailyFuel和esfDailyFuelItems。在模型中,它们如下所示: public class esfDailyFuel { [Key] [Required] public int dcID { get; set; } [Required] [StringLength(35)] public string dcNo { get; set; } [Re

我有两个表
esfDailyFuel
esfDailyFuelItems
。在模型中,它们如下所示:

public class esfDailyFuel
    {
        [Key]
        [Required]
        public int dcID { get; set; }
        [Required]
        [StringLength(35)]
        public string dcNo { get; set; }
        [Required]
        public DateTime dcDate { get; set; }
        public List<esfDailyFuelItems> Items { get; set; }
    }

public class esfDailyFuelItems
    {
        [Timestamp]
        public byte[] HIID { get; set; }
        [Key]
        [Required]
        public int dfiID { get; set; }
        [Required]
        public int dcID { get; set; }
        [ForeignKey("dcID")]
        public esfDailyFuel esfDailyFuel { get; set; }
        [Required]
        public int eoID { get; set; }
        public mnEnergyObjects mnEnergyObjects { get; set; }
        [Required]
        public int fuID { get; set; }
        public esfFuelTypes esfFuelTypes { get; set; }
        [Required]
        public int Income { get; set; }
        [Required]
        public int Outcome { get; set; }
        [Required]
        public int Remains { get; set; }
        [StringLength(255)]
        public string FileName { get; set; }
    }
我不明白如何在
项目的导航属性中获取多个相关数据。如何获取
esfFuelTypes
mnEnergyObjects
中的数据?谢谢。

您可以:

[HttpGet(“{dcID}”)]
公共异步任务GetesfDailyFuel(int-dcID)
{
var doc=wait_context.esfDailyFuel
.包括(d=>d项)
。然后包括(ft=>ft.esfFuelTypes)
.包括(d=>d项)
.然后包括(eo=>eo.mnEnergyObjects)
.FirstOrDefaultAsync(d=>d.dcID==dcID);
如果(doc==null)
{
返回NotFound();
}
退货单;
}

使用lambda表达式可以更简单地执行此操作:

[HttpGet("{dcID}")]
public Task<ActionResult<esfDailyFuel>> GetesfDailyFuel(int dcID)
=>
     _context.esfDailyFuel
         .Include(d => d.Items).ThenInclude(ft => ft.esfFuelTypes)  
         .Include(d => d.Items).ThenInclude(eo => eo.mnEnergyObjects)                     
         .FirstOrDefaultAsync(d => d.dcID == dcID) ?? NotFound();
[HttpGet(“{dcID}”)]
公共任务GetesfDailyFuel(int-dcID)
=>
_context.esfDailyFuel
.Include(d=>d.Items)。然后Include(ft=>ft.esfFuelTypes)
.Include(d=>d.Items)。然后Include(eo=>eo.mnEnergyObjects)
.FirstOrDefaultAsync(d=>d.dcID==dcID)??NotFound();

等待,问题,在您的数据库中,是否每个
esfDailyFuel
都有多个
项目
?是的,通常有多个项目。
FirstAsync
应替换为
FirstOrDefaultAsync
,因为
FirstAsync
在未找到记录时引发异常,因此
如果(doc==null)
变得多余。
[HttpGet("{dcID}")]
public Task<ActionResult<esfDailyFuel>> GetesfDailyFuel(int dcID)
=>
     _context.esfDailyFuel
         .Include(d => d.Items).ThenInclude(ft => ft.esfFuelTypes)  
         .Include(d => d.Items).ThenInclude(eo => eo.mnEnergyObjects)                     
         .FirstOrDefaultAsync(d => d.dcID == dcID) ?? NotFound();