我创建了一个名为“销售”的模型。它具有外键,例如:“idPerson”、“idCar”和“idReseller”。 但在 GET 方法响应正文中,我收到了以下响应结构:
{
"id": 1,
"idPerson": 1,
"person": null,
"idCar": 1,
"car": null,
"idReseller": 1,
"reseller": null,
"price": 50.00
}
我的疑问是:如果值为 null,id 不应该为我带来该外键的对象主体吗?我不知道这是否可以在获取响应中实现。 我正在使用 .Net、C# 和 Sql Server。
我创建了这样的模型:(我使用实体框架,代码优先)
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace CarQuery__Test.Domain.Models
{
public class Sale
{
[Key]
public int Id{ get; set; }
[ForeignKey("Person")]
public int IdPerson { get; set; }
public Person? Person { get; set; }
[ForeignKey("Car")]
public int IdCar { get; set; }
public Car? Car { get; set; }
[ForeignKey("Reseller")]
public int IdReseller { get; set; }
public Reseller? Reseller { get; set; }
public decimal Price { get; set; }
}
}
有什么问题吗?
我期待着该物体的回应,但我不知道这是否可能。
默认情况下,实体框架不包含相关实体,因此您需要使用急切加载或延迟加载等技术。
在您的情况下,您可以使用预先加载在响应中包含相关实体。以下是修改 GET 方法以包含相关实体的方法:
输入你的方法名称
public IActionResult GetSale(int id)
{
var sale = _context.Sales
.Include(s => s.Person)
.Include(s => s.Car)
.Include(s => s.Reseller)
.FirstOrDefault(s => s.Id == id);
if (sale == null)
{
return NotFound();
}
return Ok(sale);
}
在此代码中,.Include() 用于立即加载相关实体(人、汽车、经销商)以及销售实体。这样,当您检索 Sale 对象时,其相关实体也将填充在响应中。