【发布时间】:2021-03-18 23:17:13
【问题描述】:
我正在将 .Net Core Entity Framework 3.1 用于汽车零件的 Web 目录应用程序。
我有一个简单的控制器,它返回特定电机的所有 motorParts。
这是一个简单的控制器:
[HttpGet("GetPartsByMotorId/{id}")]
public async Task<ActionResult<IEnumerable<MotorParts>>> GetPartsByMotorId(Guid id)
{
var partsByMotor = await _context.MotorParts.Where(q => q.MotorId == id).OrderBy(c => c.partText).ToListAsync();
return partsByMotor;
}
它正在返回数据,但它的顺序是我不想要的,并且有一些数据重复。
从 API 返回时 JSON 如下所示:
[
{
"partId": "54",
"motorId": "3",
"partText": "Iron Heads",
"motor": {
"motorId": "3",
"motorText": "5.7 HEMI",
"motorParts": [
{
"partId": "54",
"motorId": "3",
"partText": "Iron Heads"
},
{
"partId": "8",
"motorId": "3",
"partText": "Aluminum Block"
}
]
}
},
{
"partId": "8",
"motorId": "3",
"partText": "Aluminum Block",
"motor": {
"motorId": "3",
"motorText": "5.7 HEMI",
"motorParts": [
{
"partId": "8",
"motorId": "3",
"partText": "Aluminum Block"
},
{
"partId": "54",
"motorId": "3",
"partText": "Iron Heads"
}
]
}
}
]
对我来说,问题是它首先列出一个“部分”(partId, motorId, partText),然后再列出相同的“部分”。
但我希望它首先列出电机数据,然后是该电机的所有部件,如下所示:
[
{
"motor": {
"motorId": "3",
"motorText": "5.7 HEMI",
"motorParts": [
{
"partId": "8",
"motorId": "3",
"partText": "Aluminum Block"
},
{
"partId": "54",
"motorId": "3",
"partText": "Iron Heads"
}
]
}
}
]
这是模型:
public partial class MotorParts
{
public Guid PartId { get; set; }
public Guid? MotorId { get; set; }
public string PartText { get; set; }
public virtual MotorList Motor { get; set; }
}
这是该模型的数据库上下文:
modelBuilder.Entity<MotorParts>(entity =>
{
entity.HasKey(e => e.PartId);
entity.HasOne(d => d.Motor)
.WithMany(p => p.MotorParts)
.HasForeignKey(d => d.MotorId)
.OnDelete(DeleteBehavior.Cascade)
.HasConstraintName("FK_carList_makeList");
entity.ToTable("MotorParts");
entity.Property(e => e.PartId)
.HasColumnName("PartId");
entity.Property(e => e.MotorId)
.HasColumnName("MotorId");
entity.Property(e => e.PartText)
.HasColumnName("PartText");
});
所以我想知道是否有一种方法可以在不过多更改模型的情况下获得我想要的 JSON 格式。这可能吗?
谢谢!
【问题讨论】:
标签: c# asp.net-core entity-framework-core asp.net-core-webapi asp.net-core-3.1