Ho queste classi nel mio codice:
public class Parent
{
[Key]
public int ParentID { get; set; }
public string ParentName { get; set; }
public virtual ICollection<Child> Childs { get; set; }
}
public class Child
{
[Key]
public int ChildID { get; set; }
public string ChildName { get; set; }
public int ParentID { get; set; }
[ForeignKey("ParentID")]
public virtual Parent Parent { get; set; }
}
Parent
hanno una relazione uno-a-molti con Child
e Child
hanno proprietà Parent
. Questo mi causerà problemi in futuro? Perché ho appena ricevuto un'eccezione Self referencing loop detected
quando cercavo di convertire questa classe in JObject
con Newtonsoft. Suppongo di rimuovere la proprietà Parent
da Child
modo che non causi l'auto referenziamento?
Il problema è che hai effettivamente un riferimento circolare quando vai a serializzare una di queste classi. Il genitore ha una lista di bambini che a sua volta rimanda al genitore.
Decora Child.Parent
con JsonIgnoreAttribute
e smetterà di provare a serializzare questa proprietà. È sicuramente utile come proprietà di navigazione ma non riesco a pensare a un singolo caso pratico in cui si desideri serializzare l'intero oggetto Parent come membro di un figlio. (L'id del genitore potrebbe essere utile da mantenere però.)
C'è un modo per gestire questo errore. Innanzitutto, puoi ignorare la proprietà di navigazione (virtual ICollection). Perché. questo è per la navigazione e serializzare questi effetti
Eccezione rilevata nel ciclo di auto riferimento
Ciò si verifica Newtonsoft o XmlSerializer.
In secondo luogo, è possibile utilizzare la classe POCO
senza proxy per serializzare.