Задать вопрос
@mletov

Как задать максимальный уровень для навигационный свойств при использовании include?

Пожалуйста, подскажите:

Есть сущность вопрос

public class Question
    {
        [Key]
        public int Id { get; set; }
        public string Info { get; set; }  
        public ICollection<Answer> Answers { get; set; }
    }


Есть сущность ответ

public class Answer
    {
        [Key]
        public int Id { get; set; }
        public int QuestionId { get; set; }
        [ForeignKey("QuestionId")]
        public Question Question { get; set; }
        public string Info { get; set; }
    }


Они ссылаются друг на друга. И вот хочу я, скажем, получить все вопросы с ответами на них и вернуть в json
db.Questions.Include(x => x.Answers).ToList()

Т к они циклически завязаны друг на друга, то, разумеется, происходит бесконечное зацикливание.

Как правильно указать максимальный уровень, до которого будет извлечение, или как вообще корректно работать с навигационными свойствами?
  • Вопрос задан
  • 152 просмотра
Подписаться 2 Простой 4 комментария
Решения вопроса 1
@mletov Автор вопроса
Нагуглил точный ответ

https://github.com/aspnet/Mvc/issues/5910

В Startup.cs
services.AddMvc().AddJsonOptions(x => x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kttotto
пофиг на чем писать
Если Вы пытаетесь сериализовать ef объект в json, то JsonConvert в этом случает будет рекурсией обходить все поля внутри и конечно в какой то момент зациклится. Для таких случаев обычно мапят ef объект на свою модель и уже ее и сериализуют.

Еще вот здесь есть такой вариант
return JsonConvert.SerializeObject(results, Formatting.Indented, 
new JsonSerializerSettings { 
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы