Вероятно, это связано с круговыми ссылками между вашим Argomenti * и модератором / областью. Область удерживает коллекцию обратно в 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
}
Тогда, когда я хочу вернуть это к виду:
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);
Я суммировал пару веских причин, по которым код не должен возвращать сущности в представление здесь .