Il riferimento circolare tra le entità cliente e ordine ha causato un'eccezione durante la serializzazione. Esiste un modo per forzare EF a generare un riferimento unidirezionale tra queste due entità? Grazie in anticipo!Come rimuovere il riferimento circolare in Entity Framework?
risposta
Quando ho bisogno di serializzare, generalmente proietto su altri tipi. Questo elimina riferimenti circolari, oltre ad altri dati che non desidero serializzare. Ad esempio:
var q = (from c in Repository.Customers()
where c.Id == id
select new
{
Name = c.Name,
Orders = from o in C.Orders
select new
{
Date = o.Date
}
}).First();
return Json(q);
Quando si crea un'associazione in Progettazione modelli (tasto destro del mouse Aggiungi-> associazione) si otterrà un finestre popup che assomiglia a questo:
Add association window http://i45.tinypic.com/xmoqcp.jpg
Avviso le caselle di controllo proprietà di navigazione, è possibile deselezionarli se non vuoi che vengano generati. Per risolvere il tuo problema di riferimento circolare, assicurati che solo uno o nessuno siano selezionati, non entrambi.
Ho risolto questo problema in EF 3.5 Modificando la proprietà di navigazione del figlio Getter da pubblico a interno.
Grazie, che ha lavorato per me. Non del tutto sicuro se è il modo giusto per farlo però! –
Guarda questa pagina Spero di poter fare per sopravvivere
http://msdn.microsoft.com/en-us/data/jj574232.aspx
Nota che [link-solo risposte sono discoteca uraged] (http://meta.stackoverflow.com/tags/link-only-answers/info), le risposte SO dovrebbero essere il punto finale di una ricerca di una soluzione (vs. ancora un altro scalo di riferimenti, che tendono a diventare stantii nel tempo). Si prega di considerare l'aggiunta di una sinossi autonoma qui, mantenendo il collegamento come riferimento. – kleopatra
Il getter cambiare per interno per una navigazione bambino ha lavorato per me con entitfy framework v5/v6 sotto Web API v2
ha riparato l'aiuto di api sul Web ma ha ucciso la serializzazione – marcusdev
Siamo spiacenti, I c non riesci a recuperare quello che hai detto. Puoi dirlo di più specificare? Grazie! – Roy
Aggiornamento con screenshot – Charlie
Grazie Charlie, ma non riesco a vedere l'immagine. E il mio designer non ha la casella di controllo su di esso. :(Sto usando Visual Studio 2008. – Roy