如何 'Include()' 深对象 EF Core

How to 'Include()' deep objects EF Core

我有一个自动化设备的数据结构。 它有多个输出,这些输出被组织成一个布局。

    public class AutomationLayout
{
    public Pin D0 { get; set; }
    public Pin D1 { get; set; }
    public Pin D2 { get; set; }
    public Pin D3 { get; set; }
    public Pin D4 { get; set; }
    public Pin D5 { get; set; }
    public Pin D6 { get; set; }
    public Pin D7 { get; set; }
    public Pin D8 { get; set; }
    public Pin D9 { get; set; }
}

每个输出都有多个依赖项。

    public class Pin
{
    public string Name { get; set; }
    public string DigitalSensor { get; set; }
    public Schedule Schedule { get; set; }
    public ClimateControl ClimateControl { get; set; }
    public TempRange TempRange { get; set; }
    public VoltRange VoltRange { get; set; }
}

而那些类也是属性满满的

Database diagram

我在 EF Core 中使用了数据库优先方法。

我正在将创建的模型映射到 DTO 并在我的控制器中使用它们。

    public static class DeviceDtoMapper
{
    public static DeviceGetDto MapDeviceToGetDto(Device device)
    {
        return new DeviceGetDto()
        {
            Id = device.Id,
            Name = device.Name,
            CreatedAt = device.CreatedAt
        };
    }

    public static Device MapPostDtoToDevice(DevicePostDto deviceDto)
    {
        return new Device()
        {
            Name = deviceDto.Name,
            CreatedAt = DateTimeOffset.Now.ToString()
        };
    }

    public static Device MapPutDtoToDevice(DevicePutDto deviceDto)
    {
        return new Device()
        {
            Name = deviceDto.Name
        };
    }
}

我正在尝试编写一个控制器来获取完整的自动化布局。

问题是它需要超过 1000 行 Include() 和 ThenInclude() 行,这似乎不是很有效。

如果可能,我会避免包含所有导航属性。

如何处理这个数据结构?

提前致谢。

解决方案是根据@JeremyLakeman 的建议更改数据库设计。

对于索引对象集合,我只需要使用正确的 'Includes' 和 'ThenIncludes' 系列映射结构一次。