Para evitar esto Convertí mis Entidades de Primera Código basado POCO. Para hacer esto, haga clic derecho dentro de su ventana de edmx y seleccione:
Agregue el elemento de generación de código> pestaña Código> EF POCO Entity Generator.
Tenga en cuenta que puede necesitar instalarlo con nuget si no lo ve.
En tiempo de ejecución, sin embargo, EF agrega clases de proxy a esos objetos con fines de seguimiento, pero tienden a hacer un lío con el proceso de serialización. Para evitar esto podemos simplemente establecer ProxyCreationEnabled en false de la siguiente manera:
var context = new YourEntities();
context.Configuration.ProxyCreationEnabled = false;
var results = context.YourEntity.Take(100).ToList();
A continuación, puede volver con seguridad JSON.NET datos serializados omitiendo la referencia por defecto bucle de la siguiente manera:
return JsonConvert.SerializeObject(results, Formatting.Indented,
new jsonSerializerSettings {
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
Gracias por su respuesta. No quería eliminar ninguna referencia cíclica en el gráfico de objetos, ya que no estoy del todo seguro de cómo hacerlo y cuáles serían las implicaciones de realizar este cambio. En su lugar, creé objetos sencillos y llenaron estos objetos utilizando objetos Entity Framework y luego serializar los objetos simples y funciona bien. – Hitesh
En general, es una buena práctica mantener sus entidades de dominio y sus DTO independientes entre sí. Las entidades en su estado gráfico rico e nativo son una gran manera de modelar un dominio de problema de negocio y resolver problemas de negocios, pero no se prestan bien a la orientación de servicio y serialización. Mi preferencia personal es mantener mi dominio tan rico e interrelacionado como sea posible para modelar el negocio y proporcionar API de servicio independiente que proporcionen DTO serializables individuales. – jrista
Este problema es más grande que solo los ciclos en las referencias causadas por las propiedades de navegación bidireccional. ¿Qué pasa cuando tienes 10 objetos que hacen referencia al mismo objeto dependiente exacto? ¿Cuál es la forma estándar de serializar este gráfico sin duplicar el objeto referenciado 10 veces? ¿Y por esta misma señal, deserializar los datos correctamente en el lado del cliente, recreando una sola instancia del objeto referenciado en lugar de 10 diferentes? ¿Algún estándar o patrón común para esto usando JSON? – Marchy