如何在Entity Framework Core中通过外键获取关联的categoryName
解决方案
要实现HttpGet接口返回ItemTables时包含对应的categoryName,按以下步骤操作即可:
1. 创建DTO类(推荐方案)
为了避免实体循环引用、精准控制返回字段,创建专门的数据传输对象(DTO):
public class ItemTableDto { public int Id { get; set; } public string Company { get; set; } public string Availability { get; set; } public decimal Price { get; set; } public decimal Discount { get; set; } public decimal Tax { get; set; } public string Description { get; set; } public int CategoryId { get; set; } public string CategoryName { get; set; } }
2. 修改控制器的Get接口
使用EF Core的Include加载关联的分类实体,再映射到DTO返回:
[HttpGet] public async Task<IActionResult> GetItemsTable() { var itemTables = await _itemTableDbContext.ItemTables .Include(i => i.categories) // 加载关联的分类数据 .Select(i => new ItemTableDto { Id = i.Id, Company = i.company, Availability = i.availability, Price = i.price, Discount = i.discount, Tax = i.tax, Description = i.description, CategoryId = i.categoryid, CategoryName = i.categories.categoryName }) .ToListAsync(); return Ok(itemTables); }
3. 处理循环引用问题(可选)
如果直接返回实体类而非DTO,需配置JSON序列化忽略循环引用(.NET 6+):
// Program.cs中添加 builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles; });
4. 验证Swagger展示
启动项目后访问Swagger,调用HttpGet接口即可看到返回结果中包含CategoryName字段,显示对应分类名称。
内容的提问来源于stack exchange,提问作者Firefly0027
相关产品推荐
相关产品推荐

