Las cookies nos permiten ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas el uso que hacemos de las cookies. Más Información. Aceptar

Relación uno a muchos mediante Entity Framework y ASP .NET MVC 3

Arnaldo Pérez Castano
  • Escrito por Arnaldo Pérez Castano el 30 de Septiembre de 2013
  • 1 min de lectura | Programación
Relación uno a muchos mediante Entity Framework y ASP .NET MVC 3

Actualmente el patrón de diseño MVC (Modelo-Vista-Controlador) puede considerarse la forma más organizada, estructurada y lógica de representar el proceso que sigue la web como un ente de naturaleza circular o cíclica. La estrecha relación que existe entre la programación web y diferentes campos de la computación como pueden ser la minería de datos o el estudio de bases de datos ha conseguido que las aplicaciones que se despliegan en Internet a través de un cliente que suele ser un navegador, requieran de una lógica cada vez más sólida que vaya de acuerdo a un conjunto de patrones que permitan la creación de sitios extensibles, fáciles de mantener y escalables. Esta lógica debe ir apoyada en un conjunto de herramientas que faciliten el trabajo del programador y favorezcan una reducción en los errores de programación. Entre estas herramientas se encuentran los conocidos ORM (Object Relational Mapping) que permiten vincular una base de datos con un modelo de objetos en un determinado lenguaje. Su principal ventaja radica en la posibilidad de crear el diseño conceptual de una aplicación desde el paradigma orientado a objetos, que es mucho más rico que seguir un diseño basado en tablas y columnas en una base de datos, para luego manipular los objetos desde un código orientado a objetos y que dicha manipulación encuentre su traducción en la base de datos de manera transparente. Entity FrameWork es un ejemplo de ORM y suele utilizarse como complemento en diferentes aplicaciones entre ellas ASP. NET MVC. Para crear una relación uno muchos en ASP. NET MVC mediante EF es necesario tener en cuenta muchas de las convenciones que el ORM sostiene, una convención significativa resulta el hecho de que se asuma que una propiedad de tipo entero con nombre Id se considera la llave de la tabla del objeto a la cual se mapea. Considere el siguiente ejemplo que ilustra una clase Usuario.

Captura

Los atributos que se aprecian en cada propiedad son formas de validar de manera automática los campos cuando se encuentren en un formulario. Note que todas las propiedades excepto una se representan por tipos simples. La propiedad Enterprise es la excepción a la regla anterior. Ahora consideremos el código de la clase Enterprise.

Captura

Ahora puede verse claramente la relación uno muchos que se establece entre un usuario y una empresa. Claramente una empresa puede tener muchos usuarios pero un usuario, en este caso, solo puede pertenecer a una empresa. Probablemente muchas personas considerarían que cuando se trate con la base de datos a través de EF resulte coherente agregar un usuario a una empresa, pero esta solución puede no ajustarse a la realidad, puede ser inverosímil porque entonces los usuarios serían independientes de la empresa y pudieran existir sin ella, algo que en el mundo de los negocios carece de sentido. Es por eso que la solución ideal sería añadir a los usuarios a la empresa utilizando el repositorio de empresa.

Captura

Si el lector presta algo de atención podrá notar que la clase repositorio de empresa derivada o hereda de una interfaz, esto es porque el proyecto se ha ajustado al patrón de Inyección de Dependencia (Dependency Injection) que apoya el uso de lo abstracto sobre lo concreto. Otra ventaja importante de esta solución es que se podrá tomar ventaja de un mecanismo de borrado en cascada,  de modo que cuando se borre una empresa todos los empleados a los que pertenece también serán eliminados de la base de datos.

Estas son algunas de las empresas que ya confían en OpenWebinars

Profesores y profesionales

Nuestros docentes son profesionales que trabajan día a día en la materia que imparten

Conviértete en profesor de OpenWebinars