ventajas tutorial que mvc framework first español code .net entity-framework architecture

.net - tutorial - ¿Usar entidades de Entity Framework como objetos de negocios?



orm entity framework (7)

¿No puedes volver a adjuntar los objetos si pierden su contexto de objeto original? Sin embargo, necesitaría manejar problemas de concurrencia usted mismo.

No recomendaría el uso de objetos EF como objetos DataContract para WCF, ya que vincularía muy fuertemente su implementación de objetos de entidad a clientes de servicios web, el cambio será difícil de hacer en el futuro, más difícil será el número de clientes que planea tener.

Estoy utilizando Entity Framework O / R mapper de Microsoft y el uso de clases de entidad (clases generadas que se asignan a objetos DB) como objetos comerciales. ¿Esta bien? Por favor, declare sus contras o pros. ¿Qué hacer en un caso de comunicación WCF entre la capa empresarial y la presentación, cómo enviar esos objetos como miembros de datos?


Dos limitaciones a tener en cuenta que me he encontrado son:

  1. Los objetos heredados no pueden tener propiedades de navegación, es decir, si tiene una clase de "persona" y luego un "cliente" y un "proveedor", esos clientes y proveedores no pueden tener propiedades de navegación.

  2. Los métodos y los campos calculados (cualquier cosa en las clases parciales) no se transmiten a través de ADO.Net Data Services. Si también está utilizando ADO.Net Data Services, todo aquello en lo que expanda los objetos de Entity Framework en clases parciales no se transmitirá a través de ADO.Net Servicios de datos.

Por lo general, estos no son elementos que bloquean el espectáculo (para las propiedades de navegación, simplemente no usamos herencia en el marco de la entidad, por ahora), pero podrían ser de su interés. Estoy esperando que una versión futura permita estos dos elementos.


En primer lugar, con 11k preguntas al momento de escribir estas líneas, estoy un poco sorprendido por la falta de respuestas y con el debido respeto, la calidad de las respuestas, con una pregunta bastante simple.

Entonces, ahora que me he desahogado un poco, me gustaría abordar esta (s) pregunta (s) porque creo que se aplica aún más hoy con el reciente lanzamiento de Entity Framework Code-First.

"¿Usar entidades de Entity Framework como objetos de negocios?"

Un par de puntos de aclaración antes de comenzar:

  • Cuando dices "objetos comerciales", tengo la impresión de que estos objetos a los que me refieres contienen reglas o lógica que van desde, por ejemplo, validación simple (es decir, campos obligatorios) hasta lógica más compleja (es decir, procesar el impuesto en un proceso de pago).

  • No creo que pueda responder a su pregunta de seguimiento sobre WCF. La razón de esto es simplemente porque voy a responder objetivamente a sus preguntas sobre EF como objetos comerciales que luego me obligarían subjetivamente a adoptar una posición que demostrara ser contradictoria con mi intento de responder de manera genuina y objetiva a la primera pregunta.

Dicho esto, en tu EF como preguntas sobre objetos de negocios ...

"Estoy usando Entity Framework O / R mapper de Microsoft y el uso de clases de entidad (clases generadas que están mapeadas a objetos DB) como objetos comerciales. ¿Esto está bien?"

Lo sentimos, simplemente no hay una respuesta correcta o incorrecta aquí. Depende de cuál sea su objetivo y cuál sea su conclusión, que es el diseño más razonable, al mismo tiempo que comprende las ventajas y desventajas de hacerlo.

"Por favor, indique sus contras o pros"

¡Me alegra que me hayas preguntado! Estaré encantado de responder y mi esperanza es que, teniendo en cuenta los pros y los contras, pueda tomar una decisión informada sobre si cree o no que usar EF para sus objetos comerciales es "correcto". Típicamente, explico los pros y los contras haciendo que sea fácil de "digerir", sin embargo, no creo que sea apropiado aquí porque creo que estaríamos haciendo una injusticia a un tema tan interesante que también está cerca. y querido para mi corazón

En primer lugar, permítanme hablar técnicamente por un momento ... Pueden usar objetos EF como objetos comerciales, técnicamente no hay nada que lo impida. Como cuestión de hecho, EF Code-First (CF) hace que esto sea increíblemente fácil al permitirle crear POCO y darle la posibilidad de aplicar anotaciones de datos para una validación simple, así como implementar IValidatableObject para una validación más compleja. Genial, ¿eh?

Ahí yace el corazón de la discusión.

EF, o cualquier ORM, está diseñado para admitir la gestión de datos. Su principal responsabilidad son los datos y, por lo tanto, los objetos que crea son datos centrados. Entonces, si también estás tratando de diseñar tus objetos por comportamiento, entonces tienes un pequeño enigma a la mano. En pocas palabras, este enigma se llama desajuste de impedancia. Imagínate esto; tiene dos casos de uso requeridos en su aplicación:

  1. Una pantalla para editar un usuario
  2. Un control para mostrar un subconjunto de solo lectura de la información del usuario

Si usa EF (cualquier sabor), o cualquier ORM para ese asunto, puede atraer hacia el mismo objeto de "Usuario" para manejar la capacidad de salvar a un usuario, así como buscar un usuario para extraer el subconjunto de campos de solo lectura. Probablemente lo hagas por alguna de las siguientes razones:

  1. Al igual que muchos desarrolladores, tenemos esta semilla plantada en nuestros cerebros durante la educación. El "código de consolidación" es de suma importancia o quizás más conocido como DRY - Do not Repeat Yourself, y por lo tanto puede ver la duplicación de código, como propiedades, en un contexto negativo.
  2. Los ORM, como EF 4.1, tienen limitaciones técnicas (y problemas de trabajo) como mapear múltiples POCO / objetos a la misma tabla de la base de datos forzándolos así independientemente de sus creencias.
  3. Es una forma rápida y fácil de poner en marcha una aplicación
  4. Se "siente" como lo correcto para hacer

Hay ventajas y desventajas de hacerlo y puede ver esto como una forma positiva o negativa según su opinión.

Supongo que si crees en la normalización del código sobre el comportamiento, entonces has tenido mucho éxito. Pudo limitar la cantidad de código, lo que podría ahorrarle tiempo, al escribir un solo objeto para manejar sus datos y casos de uso comercial para esa entidad.

Y supongo que si crees en la normalización del comportamiento sobre el código, entonces has fallado miserablemente. Al guardar el código, ha sacrificado el diseño de objetos por sus responsabilidades, lo que puede dificultar su administración y, por consiguiente, aumentar el costo de mantenimiento.

Independientemente de su opinión, probablemente todos estemos de acuerdo en que este objeto comercial ha asumido múltiples responsabilidades y el comportamiento (¡no datos!) Del objeto es secundario en el mejor de los casos. Su principal responsabilidad es la gestión de datos y sus responsabilidades secundarias son el procesamiento de las reglas comerciales, simples y complejas, relacionadas con la edición de un usuario y la visualización de información de usuario de solo lectura. En el diseño orientado a objetos (OOD), si el diseño de un objeto se caracteriza por su identidad y comportamiento, entonces este objeto puede ser un individuo confuso ya que no se adhiere a la definición misma de OOD.

Algo a considerar desde un punto de vista técnico, cada vez que solicita el objeto del usuario, hereda una cantidad significativa de sobrecarga. Esto puede incluir elementos tales como todas las propiedades y reglas comerciales cuando solo se muestra un subconjunto de información de solo lectura.

Entonces, ¿qué tiene que ver todo esto con si debo usar EF para representar mis objetos comerciales?

Bueno ... Si bien es técnicamente posible, existen filosofías diferentes (algunas buenas, otras malas) sobre si debe o no usar EF, o cualquier ORM, para representar sus objetos comerciales. Di una sinopsis dirigida al corazón de estas filosofías anteriores, pero están documentadas con mucho más detalle por individuos como Rocky Lhotka y Martin Fowler.

La dirección que tome probablemente dependerá de la aplicación y, desde una perspectiva filosófica, puede depender de cuán idealista o pragmático sea usted. Dicho esto, no estoy implicando que ser idealista o pragmático se relacione con el uso de EF para objetos comerciales o no, simplemente tendrá un impacto en su opinión sobre esto.

A partir de este escrito, las indicaciones de Microsoft son que EF se construye para manejar la lógica de negocios y, correcto o incorrecto, parecen moverse más en esa dirección. EF siempre está evolucionando y se están eliminando ciertas limitaciones técnicas, de modo que EF puede eventualmente ser utilizado para satisfacer lo mejor de ambos mundos. En otras palabras, eventualmente puedes tener tu pastel y comértelo también.

Espero que esto ayude.

Desactivado para responder una pregunta sobre si la ignorancia de persistencia con un ORM es ridícula teniendo en cuenta el propósito detrás de esto es administrar los datos. :-) Lo siento, no pude resistir!


Estoy usando EF de esta manera y una buena característica es que las entidades generadas son clases parciales, lo que les permite extenderse de una manera bastante protegida de los problemas de regeneración.

También eche un vistazo a este enlace en MSDN que describe algunos escenarios de uso comunes con EF en lo que respecta a Business Logic.


La aplicación de ejemplo BookLibrary del WPF Application Framework (WAF) muestra cómo se puede usar el patrón Model-View-ViewModel (MVVM) en combinación con Entity Framework.


El marco Entity se diseñó para que los objetos de la entidad se utilicen como objetos comerciales, pero debe tener en cuenta que los objetos comerciales estarán vinculados a la tecnología O / R y al modelo EDM. En EF 1.0, no hubo ningún soporte para escenarios de persistence-ignorance de persistence-ignorance , pero se agregó soporte en 4.0. Puede implementar interfaces , si no desea usar ninguna de sus clases base.

A partir de .NET 3.5 SP1, también deberían ser utilizables como parámetros y tipos de retorno en los métodos de servicio WCF sin ningún código adicional.


En mi experiencia, hemos utilizado objetos EF dentro de la capa empresarial de nuestra aplicación, pero cuando hacemos la transición a la capa de presentación a través de nuestra capa de servicios WCF, crearemos objetos de visualización a partir de los objetos EF.

En nuestro caso, solo la vista se pasa a la capa de presentación. Hacemos esto para controlar cómo se presentan los datos y aplicar una validación defensiva para los datos que ingresan desde la capa de presentación.

En el caso de aplicar objetos EF en la transacción WCF, perderá el contexto del objeto al que se asoció el objeto EF. Hay algunos esfuerzos en CodePlex que intentan ayudar con esto, pero no he continuado con sus esfuerzos.