Циркулярная ссылка в webapi2 - PullRequest
0 голосов
/ 28 мая 2018

Сценарий:

Стажер может изучать несколько технологий

ДБ

enter image description here

ef view

enter image description here

Результат

enter image description here

код контроллера:

 private InternEntities db = new InternEntities();

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

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 29 мая 2018

Это ожидаемая ошибка, и причина в том, что ваши типы ссылаются друг на друга как Infinity Mirror.Для решения проблемы у вас есть несколько вариантов.

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 - Загрузите только то, что вам нужно, что известно как Explicit Loading.

...