You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core Web API HttpGet接口无法读取Movie类ICollection<Actor>属性如何解决

问题修复方案

你遇到的问题由两个核心原因导致:

  1. EF Core默认不会自动加载关联的导航属性,你当前的查询逻辑仅加载了Genre和Director,没有加载Actors关联数据
  2. 若Actor实体类包含反向指向Movie的导航属性,序列化返回结果时会触发循环引用报错

修复步骤

1. 补充加载Actors导航属性

修改GetMoviesQuery的Handle方法,在查询时新增Include加载演员数据:

public List<GetMoviesModel> Handle()
{
    var _movieList = _context.Movies
        .Include(x => x.Genre)
        .Include(y => y.Director)
        .Include(z => z.Actors) // 新增此行加载关联演员数据
        .OrderBy(z => z.Id)
        .ToList<Movie>();
    List<GetMoviesModel> mv = _mapper.Map<List<GetMoviesModel>>(_movieList);
    return mv;
}

2. 处理循环引用问题(二选一即可,更推荐方案二)

方案一:配置序列化忽略循环引用

在项目启动配置(.NET 6+为Program.cs)中添加Json序列化规则,忽略循环引用:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.IgnoreCycles;
    });
方案二:使用自定义DTO避免暴露实体类(更安全规范)

不要在返回模型GetMoviesModel中直接使用数据库实体类Actor,自定义仅包含返回字段的DTO,避免反向导航属性导致的循环引用:
首先定义演员DTO:

public class ActorDto
{
    public int Id { get; set; }
    public string Name { get; set; }
    // 按需添加其他需要返回的演员字段,不要添加指向Movie的导航属性
}

修改GetMoviesModel中的Actors属性类型:

public class GetMoviesModel
{
    public string Name { get; set; }
    public string ReleaseDate { get; set; }
    public string Genre { get; set; }
    public string Director { get; set; }
    public float Price { get; set; }
    public ICollection<ActorDto> Actors { get; set; }
}

最后在AutoMapper配置中添加Actor到ActorDto的映射规则即可。


内容的提问来源于stack exchange,提问作者Oguz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:30:01