C# webapi2中的循环引用问题

C# webapi2中的循环引用问题,c#,asp.net-mvc,asp.net-web-api2,C#,Asp.net Mvc,Asp.net Web Api2,情景: 实习生可以学习多种技术 数据库设计 ef视图 结果 控制器代码: private InternEntities db = new InternEntities(); // GET: api/Interns public IQueryable<Intern> GetInterns() { return db.Interns; } 我做错了什么?这是一个预期的错误,原因是您的类型像无限镜像一样相互引用。为了解决这个问题,您有几

情景:

实习生可以学习多种技术

数据库设计

ef视图

结果

控制器代码:

 private InternEntities db = new InternEntities();

    // GET: api/Interns
    public IQueryable<Intern> GetInterns()
    {
        return db.Interns;
    }

我做错了什么?

这是一个预期的错误,原因是您的类型像无限镜像一样相互引用。为了解决这个问题,您有几种选择

1-可以开发ViewModel,然后序列化该模型:

public class InternViewModel{
    public int Id {get; set;}
    public String Name {get; set;}
    public List<String> Tehcnologies {get; set;}
}
2-在操作中返回实体时,可以选择所需的属性:

public async Task<List<Technology>> Get() {
    var data = dbContext.Set<Technology>().Select(x=> new Technology{
        Id = x.Id,
        Name = x.Name,
        Intern= new Intern {
             Id = x.Technology.Id,
             Name = x.Technology.Name,
             Technologies = null
        }
    });
    return await data.ToListAsync();
}
3-只加载您需要的,称为显式加载