1) Откройте URL-адрес проекта: https://github.com/someuser/project-name 2) вверху, кроме проекта имя, нажмите EDIT
Вероятно, это связано с круговыми ссылками между вашим Argomenti * & amp; Модератор / Площадь. Область удерживает коллекцию обратно в Argomenti *, поэтому, когда MVC начинает сериализовать корневую сущность (Argomenti), она попадает в Area, затем перебирает в этой области коллекцию Argomenti * и затем цикл продолжается. Он выручает и не пытается сериализовать циклические зависимости.
Как правило, лучшее, что нужно сделать с EF и представлениями, это , а не пытаться отправить объекты в представление. Вместо этого создайте модель представления POCO (обычный старый объект C #) для отправки в представление. Эта модель представления содержит только поля, необходимые для представления, и ваш запрос EF использует .Select()
для заполнения этой модели представления. Это позволяет избежать всей проблемы циклических ссылок и исключает необходимость преднамеренной активной загрузки (.Include()
) или риска производительности из-за отложенной загрузки.
Например: если мне нужен список Argumenti, и я хочу отобразить каждую область и модератора как часть этого:
[Serializable]
public class ArgumentiViewModel
{
public string NomeArgomento { get; set; }
public bool? Archiviato { get; set; }
public int? NumeroRigaPerArea { get; set; }
public string TestoPerArgomento { get; set; }
public string NomeArea { get; set; } // From Area
public string NomeCognome { get; set; } // From Moderator
}
Затем, когда я хочу вернуть это в представление: [119 ]
var argomentiViewModels = db.ArgomentiPerArea
.Select(x => new ArgomentiViewModel
{
NomeArgomento = x.NomeArgomento,
Archiviato - x.Archiviato,
NumeroRigaPerArea = x.NumeroRigaPerArea,
TestoPerArgomento = x.TestoPerArgomento,
NomeArea = x.Area.NomeArea, // From Area
NomeCognome = x.Moderatori.NomeCognome // From Moderator
}).ToList();
string msg = "m";
return View(argomentiViewModels);
Я суммировал пару веских причин, почему код не должен возвращать сущности в представление здесь .