Principales respuestas
necesito saber algunas cosas sobre EF

Pregunta
-
Hola, les comento que soy nuevo usando el entity framework, y directamente soy nuevo en todo .net
hay algo que no entiendo de esto y es lo siguiente:.
mas alla de como hagas primero (si la base o el modelo) , quisiera saber :
Si creo una entidad PRODUCTO, esto represa la clase PRODUCTO tambien? o es otra cosa que solo tiene propiedades para la comunicacion con la base de datos? s
si esto representa la clase Producto en el proyecto, como veo el CODIGO, o mejor dicho quiero agregarle METODOS que tendra la clase producto, como se hace?
y si solo es una entidad para la comunicacion con la base de datos, tengo que crear yo la clase PRODUCTO aparte?
porfavor respoindame mis dudas... gracias!!
Respuestas
-
Las dos opciones son válidas. Hay gente que prefiere usar las entidades generadas por EF exclusivamente como capa de comunicación, y luego añadir clases separadas para contener la funcionalidad "de negocio". Pero también es posible añadir dicha funcionalidad dentro de las mismas clases que utiliza EF. Si estás usando "code first", entonces no hay que hacer nada en especial: puedes añadir métodos en las clases sin más. En cambio, si usas "database-first", entonces lo que se hace es aprovechar que las clases autogeneradas por EF son "partial class", y se escribe en paralelo otro "partial class" con el mismo nombre de clase para agregar dentro los métodos adicionales que se desee incorporar a las entidades.
- Marcado como respuesta martiDevo lunes, 4 de julio de 2016 18:46
-
Una clase parcial permite contener miembros para la misma definición en dos o más archivos (cuida mantener el mismo espacio de nombres) donde todas "las partes" -de la clase- se combinan en una sola al momento de compilar el proyecto. Algo como lo siguiente:
Archivo 1: public partial class Cliente { public void DarDeAlta() { } } Archivo 2: public partial class Cliente { public void DarDeBaja() { } }
Reitero, ambas partes se combinarán en una sola clase cuando compiles la aplicación.
¿Por qué necesitas de clases parciales para definir tus métodos?
Porque si escribes tus métodos en el mismo archivo que genera el diseñador corres el riesgo de perder código cuando vuelvas a generar las clases, el diseñador borra y crea nuevamente las clases. Conteniendo tus métodos en otro archivo (como clase parcial) pones a buen recaudo tú código -alejado de las manos del diseñador-
- Marcado como respuesta martiDevo lunes, 4 de julio de 2016 18:46
-
//la segunda "parte" de la clase puede estar alojada en cualquier carpeta del proyecto?
Lo único que debes cuidar es que todas las clases parciales se encuentren en el mismo ensamblado y en el mismo espacio de nombres. Fíjate el espacio de nombres de las clases que genera el diseñador (algo como: namespace Nombre.Models {}), es el mismo espacio de nombres que debes tener cuando implementes una clase parcial en otro archivo.
//las dos partes tienen que ser identicas? osea si los atributos y propiedades estan en la primera parte, tienen que estar en la segunda?
No, de hecho la idea de una clase parcial es contener miembros distintos, si replicas los mismos miembros obtendrás la misma excepción que obtendrías cuando nombras de igual manera a dos miembros de una clase.
- Marcado como respuesta martiDevo lunes, 4 de julio de 2016 18:46
Todas las respuestas
-
Las dos opciones son válidas. Hay gente que prefiere usar las entidades generadas por EF exclusivamente como capa de comunicación, y luego añadir clases separadas para contener la funcionalidad "de negocio". Pero también es posible añadir dicha funcionalidad dentro de las mismas clases que utiliza EF. Si estás usando "code first", entonces no hay que hacer nada en especial: puedes añadir métodos en las clases sin más. En cambio, si usas "database-first", entonces lo que se hace es aprovechar que las clases autogeneradas por EF son "partial class", y se escribe en paralelo otro "partial class" con el mismo nombre de clase para agregar dentro los métodos adicionales que se desee incorporar a las entidades.
- Marcado como respuesta martiDevo lunes, 4 de julio de 2016 18:46
-
gracias por responder,
te hago una consulta mas, vos decis que puedo agregar metodos a las entidades. pero cuando yo genero una entidad con la herramienta de diseño de entidades, nose agregar funciones ni tampoco ver el codigo de esa clase(entidad) como hago entonces?
como hago para que esa entidad se vea como una clase?
por eejemplo en java, usando hibernate, la entidad era una clase comun, que abajo de las propiedades podias comunmente agregar un metodo . El codigo se ve
aca solo veo un diseñador de entidades que solo me deja agregar propiedades y asociaciones ..
-
Las dos opciones son válidas. Hay gente que prefiere usar las entidades generadas por EF exclusivamente como capa de comunicación, y luego añadir clases separadas para contener la funcionalidad "de negocio". Pero también es posible añadir dicha funcionalidad dentro de las mismas clases que utiliza EF. Si estás usando "code first", entonces no hay que hacer nada en especial: puedes añadir métodos en las clases sin más. En cambio, si usas "database-first", entonces lo que se hace es aprovechar que las clases autogeneradas por EF son "partial class", y se escribe en paralelo otro "partial class" con el mismo nombre de clase para agregar dentro los métodos adicionales que se desee incorporar a las entidades.
donde puedo ver el codigo de la entidad para agregarle metodo? -
¿Haces uso de DataBase First?
De ser ese el caso, el wizard te permite crear un diagrama (.edmx) que corresponde a las clases del modelo según la base de datos. El diagrama es el componente visual de las clases que constituyen el modelo, dicho esto, expande el nodo seleccionando tu diagrama (explorador de soluciones) y notarás las clases generadas. Considera definir tus métodos haciendo uso de una clase parcial -de hecho las clases generadas son clases parciales-, la recomendación va puesta para no perder los métodos que hayas escrito en caso generes nuevamente el diagrama.
-
¿Haces uso de DataBase First?
De ser ese el caso, el wizard te permite crear un diagrama (.edmx) que corresponde a las clases del modelo según la base de datos. El diagrama es el componente visual de las clases que constituyen el modelo, dicho esto, expande el nodo seleccionando tu diagrama (explorador de soluciones) y notarás las clases generadas. Considera definir tus métodos haciendo uso de una clase parcial -de hecho las clases generadas son clases parciales-, la recomendación va puesta para no perder los métodos que hayas escrito en caso generes nuevamente el diagrama.
-
Va de lo mismo, en este caso el diagrama (entidades, propiedades y asociaciones) lo construyes tú desde el diseñador y a partir del diagrama se genera la base de datos. El diagrama (componente visual) genera las clases según el modelo diseñado, fíjate en el explorador de soluciones:
Fíjate la clases generadas (ActividadEconomica y CabAdquisicionNeumatico), de igual manera que en el acercamiento DataBaseFirst, se generan como clases parciales, la idea es que puedas seguir con la implementación de clases parciales de la misma entidad para escribir tus métodos y evitar que en una actualización del modelo se pierda código.
¿Aún tienes dudas? Puedes comentarlas
-
Va de lo mismo, en este caso el diagrama (entidades, propiedades y asociaciones) lo construyes tú desde el diseñador y a partir del diagrama se genera la base de datos. El diagrama (componente visual) genera las clases según el modelo diseñado, fíjate en el explorador de soluciones:
Fíjate la clases generadas (ActividadEconomica y CabAdquisicionNeumatico), de igual manera que en el acercamiento DataBaseFirst, se generan como clases parciales, la idea es que puedas seguir con la implementación de clases parciales de la misma entidad para escribir tus métodos y evitar que en una actualización del modelo se pierda código.
¿Aún tienes dudas? Puedes comentarlas
-
Una clase parcial permite contener miembros para la misma definición en dos o más archivos (cuida mantener el mismo espacio de nombres) donde todas "las partes" -de la clase- se combinan en una sola al momento de compilar el proyecto. Algo como lo siguiente:
Archivo 1: public partial class Cliente { public void DarDeAlta() { } } Archivo 2: public partial class Cliente { public void DarDeBaja() { } }
Reitero, ambas partes se combinarán en una sola clase cuando compiles la aplicación.
¿Por qué necesitas de clases parciales para definir tus métodos?
Porque si escribes tus métodos en el mismo archivo que genera el diseñador corres el riesgo de perder código cuando vuelvas a generar las clases, el diseñador borra y crea nuevamente las clases. Conteniendo tus métodos en otro archivo (como clase parcial) pones a buen recaudo tú código -alejado de las manos del diseñador-
- Marcado como respuesta martiDevo lunes, 4 de julio de 2016 18:46
-
Una clase parcial permite contener miembros para la misma definición en dos o más archivos (cuida mantener el mismo espacio de nombres) donde todas "las partes" -de la clase- se combinan en una sola al momento de compilar el proyecto. Algo como lo siguiente:
Archivo 1: public partial class Cliente { public void DarDeAlta() { } } Archivo 2: public partial class Cliente { public void DarDeBaja() { } }
Reitero, ambas partes se combinarán en una sola clase cuando compiles la aplicación.
¿Por qué necesitas de clases parciales para definir tus métodos?
Porque si escribes tus métodos en el mismo archivo que genera el diseñador corres el riesgo de perder código cuando vuelvas a generar las clases, el diseñador borra y crea nuevamente las clases. Conteniendo tus métodos en otro archivo (como clase parcial) pones a buen recaudo tú código -alejado de las manos del diseñador-
Genial sos un genio y gracias!!
unas consultas mas. la segunda "parte" de la clase puede estar alojada en cualquier carpeta del proyecto?
otra pregunta...
las dos partes tienen que ser identicas? osea si los atributos y propiedades estan en la primera parte, tienen que estar en la segunda?
-
Si, lo único que debes de cuidar es que todas las clases parciales se encuentren en el mismo ensamblado y en el mismo espacio de nombres. Fíjate el espacio de nombres de las clases que genera el diseñador (algo como: namespace Nombre.Models {}), es el mismo espacio de nombres que debes tener cuando implementes una clase parcial en otro archivo.
otra pregunta...
las dos partes tienen que ser identicas? osea si los atributos y propiedades estan en la primera parte, tienen que estar en la segunda?
-
//la segunda "parte" de la clase puede estar alojada en cualquier carpeta del proyecto?
Lo único que debes cuidar es que todas las clases parciales se encuentren en el mismo ensamblado y en el mismo espacio de nombres. Fíjate el espacio de nombres de las clases que genera el diseñador (algo como: namespace Nombre.Models {}), es el mismo espacio de nombres que debes tener cuando implementes una clase parcial en otro archivo.
//las dos partes tienen que ser identicas? osea si los atributos y propiedades estan en la primera parte, tienen que estar en la segunda?
No, de hecho la idea de una clase parcial es contener miembros distintos, si replicas los mismos miembros obtendrás la misma excepción que obtendrías cuando nombras de igual manera a dos miembros de una clase.
- Marcado como respuesta martiDevo lunes, 4 de julio de 2016 18:46
-
//la segunda "parte" de la clase puede estar alojada en cualquier carpeta del proyecto?
Lo único que debes cuidar es que todas las clases parciales se encuentren en el mismo ensamblado y en el mismo espacio de nombres. Fíjate el espacio de nombres de las clases que genera el diseñador (algo como: namespace Nombre.Models {}), es el mismo espacio de nombres que debes tener cuando implementes una clase parcial en otro archivo.
//las dos partes tienen que ser identicas? osea si los atributos y propiedades estan en la primera parte, tienen que estar en la segunda?
No, de hecho la idea de una clase parcial es contener miembros distintos, si replicas los mismos miembros obtendrás la misma excepción que obtendrías cuando nombras de igual manera a dos miembros de una clase.
en la segunda parte de la clase, ahi no hace falta poner los atributos, directamente puedo solo poner los metodos , no?
y un contructor conviene poner ahi?(en la segunda parte de la clase )
-
Reitero, no necesitas replicar miembros, obtendrías una excepción.
¿Conviene un constructor?
Los constructores no se implementan por simple conveniencia, se implementan a razón de alguna necesidad. ¿Necesitas de un constructor? Si lo necesitas entonces implementa. Sólo ten cuidado -no estoy seguro- que la clase generada no implemente un constructor porque -como vengo repitiendo- si replicas miembros en las clases parciales obtendrás una excepción.
-
Reitero, no necesitas replicar miembros, obtendrías una excepción.
¿Conviene un constructor?
Los constructores no se implementan por simple conveniencia, se implementan a razón de alguna necesidad. ¿Necesitas de un constructor? Si lo necesitas entonces implementa. Sólo ten cuidado -no estoy seguro- que la clase generada no implemente un constructor porque -como vengo repitiendo- si replicas miembros en las clases parciales obtendrás una excepción.
si , en algunos casos necesito un contructor, solo en algunos.
amigo gracias, no se como contactarte si tengo alguna duda sobre .net, no creo que te encuentre siempre por aqui
-
Si, me sueles encontrar por aquí a menudo, pero en cualquier caso tienes otros colaboradores en este foro que te pueden ayudar de igual o mejor manera, de hecho, ya notarás que por aquí hay muchos profesionales destacados (se les suele denominar MVP). Por otro lado, en caso hayas resuelto todas tus dudas no olvides cerra el hilo marcando las respuestas que te hayan ayudado, de esa manera colaboras con otro usuario que ingresa al foro con un problema similar a poder detectar fácilmente el camino a seguir.
-
Si, me sueles encontrar por aquí a menudo, pero en cualquier caso tienes otros colaboradores en este foro que te pueden ayudar de igual o mejor manera, de hecho, ya notarás que por aquí hay muchos profesionales destacados (se les suele denominar MVP). Por otro lado, en caso hayas resuelto todas tus dudas no olvides cerra el hilo marcando las respuestas que te hayan ayudado, de esa manera colaboras con otro usuario que ingresa al foro con un problema similar a poder detectar fácilmente el camino a seguir.
-
Si, me sueles encontrar por aquí a menudo, pero en cualquier caso tienes otros colaboradores en este foro que te pueden ayudar de igual o mejor manera, de hecho, ya notarás que por aquí hay muchos profesionales destacados (se les suele denominar MVP). Por otro lado, en caso hayas resuelto todas tus dudas no olvides cerra el hilo marcando las respuestas que te hayan ayudado, de esa manera colaboras con otro usuario que ingresa al foro con un problema similar a poder detectar fácilmente el camino a seguir.
una pregunta mas.
los dos archivos en una clase parcial
tienen que tener el : EntityObject ?