我想为 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);
首先,您需要连接所有表,然后将关系映射到
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);