linq 内部连接带来了数据,但在执行查询时无法获取数据

mwkjh3gx  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(143)

我正在尝试查询activo(资产)的相关数据
资产可以具有类型和类别
我无法为Linq创建以下SQL查询

端点

[HttpGet]
[Route("buscarid/{id}", Name = "BuscarPorID")]
public async Task<ActionResult<DtoLecturaActivo>> BuscarPorID(int id)
{
    try
    {
        var activo = await context.Activos
                                  .Include(x => x.IdActivoTipoCategoriaNavigation)
                                  .FirstOrDefaultAsync(activo => activo.Id == id);

        if (activo == null)
        {
            return NotFound();
        }

        DtoLecturaActivo dtoActivo = mapper.Map<DtoLecturaActivo>(activo);
        return Ok(dtoActivo);
    }
    catch (Exception ex)
    {
        throw new Exception("Something wrong happened in the Activo-buscarPorID:", ex);
    }
}

资产模型类:

using System;
using System.Collections.Generic;

namespace API.Models
{
    public partial class Activo
    {
        public Activo()
        {
            Historials = new HashSet<Historial>();
        }

        public int Id { get; set; }
        public int? IdInformacion { get; set; }
        public int? IdDepartamento { get; set; }
        public int? IdUnidad { get; set; }
        public int? IdLocalidad { get; set; }
        public int? IdActivoTipoCategoria { get; set; }
        ...
        public virtual ActivoTipoCategorium IdActivoTipoCategoriaNavigation { get; set; }
        public virtual Departamento IdDepartamentoNavigation { get; set; }
        public virtual Informacion IdInformacionNavigation { get; set; }
        public virtual Localidad IdLocalidadNavigation { get; set; }
        public virtual Unidad IdUnidadNavigation { get; set; }
        public virtual ICollection<Historial> Historials { get; set; }
    }
}

模型资产类别:

namespace API.Models
{
    public partial class ActivoTipoCategorium
    {
        public ActivoTipoCategorium()
        {
            Activos = new HashSet<Activo>();
        }

        public int Id { get; set; }
        public int? IdActivoTipo { get; set; }
        public string Nombre { get; set; }

        public virtual ActivoTipo IdActivoTipoNavigation { get; set; }
        public virtual ICollection<Activo> Activos { get; set; }
    }
}

模型资产类型:

namespace API.Models
{
    public partial class ActivoTipo
    {
        public ActivoTipo()
        {
            ActivoTipoCategoria = new HashSet<ActivoTipoCategorium>();
        }

        public int Id { get; set; }
        public string Nombre { get; set; }
        public DateTime? FechaCreacion { get; set; }

        public virtual ICollection<ActivoTipoCategorium> ActivoTipoCategoria { get; set; }
    }
}

资产DTO:

namespace API.Dtos
{
    public class DtoLecturaActivo
    {
        public int Id { get; set; }
        public int? IdInformacion { get; set; }
        public int? IdDepartamento { get; set; }
        public int? IdUnidad { get; set; }
        public int? IdLocalidad { get; set; }
        public int? IdActivoTipo { get; set; }
        public int? IdActivoTipoCategoria { get; set; }
        public long? IdCodigo { get; set; }
        public string Marca { get; set; }
        public string Color { get; set; }
        public string Modelo { get; set; }
        public string Componentes { get; set; }
        public string Serial { get; set; }
        public bool? Condicion { get; set; }
        public string Observaciones { get; set; }
        public DateTime? FechaCreacion { get; set; }
        public DtoLecturaActivoTipo Tipo { get; set; }
        public DtoLecturaActivoTipoCategorium Categoria { get; set; }
    }
}

自动Map器配置文件

namespace API.AutomapperProfiles
{
    public class AutomapperProfiles : Profile
    {
        public AutomapperProfiles()
        {
            // Lectura  <ModeloOrigen, ModeloDestino>
            CreateMap<Activo, DtoLecturaActivo>();
            CreateMap<DtoLecturaActivo, Activo>();
            CreateMap<Informacion, DtoLecturaInformacion>();
            CreateMap<Departamento, DtoLecturaDepartamento>();
            CreateMap<Unidad, DtoLecturaUnidad>();
            CreateMap<Localidad, DtoLecturaLocalidad>();
            CreateMap<ActivoTipo, DtoLecturaActivoTipo>();
            CreateMap<ActivoTipoCategorium, DtoLecturaActivoTipoCategorium>();
            // Escritura
            CreateMap<DtoEscrituraActivo, Activo>();
            // Actualizar
            CreateMap<DtoActualizarActivo, Activo>();
        }
    }
}

SQL查询(预期结果)

SELECT 
    activo.Id, tipo.Id AS 'id_Tipo', tipo.Nombre,  
    activo.IdActivoTipoCategoria AS 'id_categoria', 
    categoria.Nombre
FROM
    SWF.Inventario.Activo AS activo
JOIN 
    SWF.Inventario.ActivoTipoCategoria categoria ON categoria.Id = activo.IdActivoTipoCategoria
JOIN 
    SWF.Inventario.ActivoTipo tipo ON tipo.Id = categoria.IdActivoTipo
WHERE
    activo.Id = 300


指令集

rsaldnfx

rsaldnfx1#

由于您没有使用自动Map器的ForMemberForPath方法,因此默认情况下只Map名称匹配的字段。
根据您提供的信息,我认为一个Map应该是

CreateMap<ActivoTipoCategorium, DtoLecturaActivo>()

相关问题