¿Cuáles son las ventajas de usar una sobre la otra? Sé que las clases de POCO son más óptimas, pero ¿valen la pena el exceso? ¿Y deberíamos estar siempre usando POCO o hay un momento en el que debería preferir las clases de marco de entidades?POCO Vs Entity Framework Generated Classes?
Respuesta
Las clases predeterminadas EF todas heredan de la clase base EF, mientras que POCO no (de ahí el nombre). Al heredar de la clase base EF, la lógica detrás del seguimiento de cambios está oculta y toda la lógica se almacena dentro del contexto que contiene referencias a sus objetos. Esto es preferible si está trabajando en un estado conectado, es decir, tiene contexto al mismo tiempo que tiene entidades. Este suele ser el caso donde construyes un cliente 'gordo', por lo que el cliente y la base de datos son los únicos dos niveles.
Por otro lado, si trabaja con servicios web/formularios web, las entidades que visita no tienen contexto y tienen que rastrear el estado ellos mismos, entonces el POCO es la mejor opción, ya que tener el objeto de seguimiento de cambios como su propiedad que se puede transferir hasta que decida aplicar los cambios al contexto y guardar. Otro beneficio sería que sus clientes no tienen que ser .NET y no tienen que tener el EF .dll para deserializar sus objetos.
La razón por la que utilizo POCO es la separación de las preocupaciones, es decir, no quiero que mi interfaz tenga que saber cómo funciona mi back-end. Entonces, si quiero cambiar de Linq a Sql a EF o N Hibernate, no tengo que modificar mi código de interfaz.
Utilice POCO si desea una arquitectura limpia, un acoplamiento flexible y una capacidad de prueba máxima.
Si no te importan esas cosas, entonces no las uses.
Personalmente, esas son las cosas más importantes en cualquier aplicación (especialmente una que se requiere mantener durante un largo período de tiempo), por lo tanto, siempre uso POCO.
Teniendo esto en cuenta, los POCO requieren la implementación de algún tipo de mecanismo de seguimiento de cambios, lo que puede ser complicado. Pero es una instalación de una sola vez, y vale la pena el esfuerzo.
Tengo esta lógica en una DLL personalizada que comparto entre proyectos, así que no tengo que seguir haciéndolo una y otra vez.
Para obtener más información acerca de por qué POCO de son importantes en el sentido general (no EF/.NET específica), ver mi respuesta here.
mirada a los artículos siguientes:
- 1. Entity Framework + POCO
- 2. Entity Framework 5 y Visual Studio 2012 POCO Classes en Proyecto diferente
- 3. Entity Framework POCO predeterminado constructor
- 4. ¿Qué es Entity Framework con POCO
- 5. Manejar Entity Framework On Create POCO
- 6. Entity Framework 4 POCO con diccionario
- 7. Subssonic 3 VS Entity Framework
- 8. Eliminando las propiedades de navegación de POCO-classes en Entity Framwork
- 9. ADO.NET Generador de DbContext vs. ADO.NET Poco Entity Generator (ObjectContext)
- 10. Entity Framework 4 - AddObject vs Attach
- 11. Entity Framework POCO SaveChanges() en la actualización no funciona?
- 12. Entity Framework Seleccione un POCO nuevo sin .ToList() primero
- 13. Entity Framework POCO - Actualizar una propiedad de navegación
- 14. DTO classes vs. struct
- 15. Entity Framework 4, heredando vs extendiendo?
- 16. nHibernate vs Entity Framework con Oracle backend
- 17. .NET Entity Framework - IEnumerable VS. IQueryable
- 18. Linq to Sql vs Entity Framework Performance
- 19. 'ObjectContext' vs 'DbContext' en Entity Framework
- 20. Entity Framework vs Direct Data Access
- 21. Entity Framework Entity SQL vs Query builder methods
- 22. paquete java.util - classes vs interfaces
- 23. HKEY_CURRENT_USER \ Software \ Wow6432Node \ Classes vs HKEY_CURRENT_USER \ Software \ Classes \ Wow6432Node
- 24. Entity Framework vs Linq to Entities vs Linq to SQL
- 25. Vistas y Entity Framework
- 26. ACE vs Boost vs Poco vs wxWidgets
- 27. Pensamientos sobre Entity Framework
- 28. Custom Java XMLBuilder vs Standard classes-based
- 29. /WEB-INF/classes vs/WEB-INF/lib
- 30. Entity Framework Performance Issue
Por qué no simplemente representar a su "poco" con una interfaz que sus clases de EF generados pueden aplicar? Entonces, su UI (o servicio de nivel superior) puede lograr un acoplamiento flexible y comprobabilidad solo trabajando en las definiciones de la interfaz en su lugar ... Y no habrá necesidad de escribir/ejecutar funciones de conversión. – Reddog
@Reddog - Bueno, mi ensamblado POCO no tiene referencias a 'System.Data.Entity', no depende de EF. Si usa clases generadas por EF, su biblioteca de clase quedará "ligada" a EF. Si deseo pasar a otro ORM (o DAL), puedo reutilizar mis clases de POCO. Lo mismo no puede decirse con las clases generadas por EF. No se trata solo de un acoplamiento flexible de * otros * proyectos, sino de un acoplamiento flexible entre el POCO y el propio Entity Framework. Permite un verdadero "modelo de dominio". – RPM1984