Обнаружена циклическая ссылка указывает, что EF генерирует прокси-объекты при генерации результатов запроса, которые нельзя сериализовать с использованием JsonResult
.Предполагается, что SurveyAppEntities
является вашим DbContext
экземпляром, поэтому вам нужно сделать один из 2 вариантов ниже:
1) Отключить создание прокси
Необходимо установитьProxyCreationEnabled
свойство false
, которое не позволяет EF создавать прокси-объекты, которые нельзя сериализовать:
[HttpPost]
public JsonResult Index(int prefix)
{
List<SelectList> Questions = new List<SelectList>();
List<Question> QuestionList = new List<Question>();
List<string> ll = new List<string>();
Question nn = new Question();
SurveyAppEntities ObjectSur = new SurveyAppEntities();
// this line is mandatory
ObjectSur.Configuration.ProxyCreationEnabled = false;
QuestionList = (from q in ObjectSur.Questions
join b in ObjectSur.SurveyQuestions on q.ID equals b.QuestionID
where b.SurveyID.Equals(prefix)
select q).ToList();
return Json(QuestionList, JsonRequestBehavior.AllowGet);
}
2) Отключить отслеживание результатов запроса
EF реализует отслеживание результатов запроса с помощью прокси-объектов, которые можно отключить, добавив AsNoTracking()
к каждой сущности таблицы:
[HttpPost]
public JsonResult Index(int prefix)
{
List<SelectList> Questions = new List<SelectList>();
List<Question> QuestionList = new List<Question>();
List<string> ll = new List<string>();
Question nn = new Question();
SurveyAppEntities ObjectSur = new SurveyAppEntities();
QuestionList = (from q in ObjectSur.Questions
join b in ObjectSur.SurveyQuestions on q.ID equals b.QuestionID
where b.SurveyID.Equals(prefix)
select q).AsNoTracking().ToList(); // prevents result tracking
return Json(QuestionList, JsonRequestBehavior.AllowGet);
}
Примечание:
Вы также можете попытаться вернуть только обязательные свойства вместо всего объекта ObjectSur.Questions
.
Проблема, связанная с:
Обнаружено исключение при циклической ссылке при сериализации объекта в JSON