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();