如何使用 Dapper 查询表并映射所有相关表?

问题描述 投票:0回答:1

我想为 API 编写一个查询,以获取所有所需的 JSON 数据,同时将所有相关表保留在最终结果中。我研究了this thread,但我无法在我的案例中实现它。我有以下型号:

设备.cs

public class Equipment
{
    [Key]
    public long EquipmentId { get; set; }
    [Required]
    public string EquipmentCode { get; set; }
    [Required]
    public string EquipmentTitle { get; set; }
    [Required]
    public bool IsActive { get; set; }

    //Navigation properties
    [Required]
    public int CostCenterId { get; set; }
    public CostCenter CostCenter { get; set; }
    public int? EquipmentCategoryId { get; set; }
    public EquipmentCategory? EquipmentCategory { get; set; }
    public int EquipmentTypeId { get; set; }
    public EquipmentType equipmentType { get; set; }
}

成本中心.cs

public class CostCenter
{
    [Key]
    public int CostCenterId { get; set; }
    [Required]
    [MaxLength(100)]
    public string Title { get; set; }
    [Required]
    public bool IsActive { get; set; } = true;


    //Navigation properties
    [JsonIgnore]
    public virtual List<Equipment>? Equipments { get; set; }
}

设备类别.cs

public class EquipmentCategory
{
    [Key]
    public int EquipmentCategoryId { get; set; }
    [Required]
    [MaxLength(100)]
    public string CategoryCode { get; set; }
    [Required]
    [MaxLength(100)]
    public string CategoryName { get; set; }

    //Navigation property
    [JsonIgnore]
    public virtual List<Equipment>? Equipments { get; set; }
}

设备类型.cs

public class EquipmentType
{
    [Key]
    public int EquipmentTypeId { get; set; }
    [Required]
    [MaxLength(100)]
    public string EquipmentTypeTitle { get; set; }

    //Navigation property
    [JsonIgnore]
    public virtual List<Equipment>? Equipments { get; set; }
}

我在控制器中使用以下代码:

var query = "SELECT * FROM Equipments INNER JOIN CostCenters ON CostCenters.CostCenterId = Equipments.CostCenterId  WHERE  EquipmentCode LIKE '1101%'"

var result = connection.Query<Equipment>(query).ToList();

return Ok(result);
c# sql dapper
1个回答
2
投票

首先,您需要连接所有表,然后将关系映射到

Equipment
对象,如下所示:

var query = @"
    SELECT * FROM Equipments
    INNER JOIN CostCenters ON CostCenters.CostCenterId = Equipments.CostCenterId  
    INNER JOIN EquipmentCategories ec ON Equipments.EquipmentCategoryId = ec.EquipmentCategoryId 
    INNER JOIN EquipmentTypes t ON Equipments.EquipmentTypeId = t.EquipmentTypeId
    WHERE EquipmentCode LIKE '1101%'";

var result = connection
    .Query<Equipment, CostCenter, EquipmentCategory, EquipmentType, Equipment>(
        query,
        (equipment, center, category, type) => {
            equipment.CostCenter = center;
            equipment.EquipmentCategory = category;
            equipment.EquipmentType = type;
            return equipment;
        })
    .ToList();

return Ok(result);
© www.soinside.com 2019 - 2024. All rights reserved.