none
necesito saber algunas cosas sobre EF RRS feed

  • 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!!

    lunes, 4 de julio de 2016 5:05

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
    lunes, 4 de julio de 2016 6:07
  • martiDevo,

    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
    lunes, 4 de julio de 2016 17:53
  • martiDevo,

    //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
    lunes, 4 de julio de 2016 18:08

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
    lunes, 4 de julio de 2016 6:07
  • 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 ..

    lunes, 4 de julio de 2016 14:23
  • 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?
    lunes, 4 de julio de 2016 14:34
  • martiDevo,

    ¿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.

    lunes, 4 de julio de 2016 15:30
  • martiDevo,

    ¿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.

    no, utilizo el model first, y tengo la base creada a partir de ahi, lo qe quiero ver son las clases de las entidades asi le pongo sus respectivos metodos! como hago para ver esas clases SU CODIGO
    lunes, 4 de julio de 2016 16:23
  • martiDevo,

    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

    lunes, 4 de julio de 2016 16:55
  • martiDevo,

    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

    Gracias por responder, tengo una duda  mas, ya pude ver ese codigo, ahora , que es esto de clases parciales? me falta ese concepto? que diferencia tiene con clase comun? tengo que codificar sus metodos ahi? o creo una clase normal  .cs  ?
    lunes, 4 de julio de 2016 17:38
  • martiDevo,

    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
    lunes, 4 de julio de 2016 17:53
  • martiDevo,

    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?

    • Editado martiDevo lunes, 4 de julio de 2016 17:57
    • Marcado como respuesta martiDevo lunes, 4 de julio de 2016 18:46
    • Desmarcado como respuesta martiDevo lunes, 4 de julio de 2016 18:46
    lunes, 4 de julio de 2016 17:56
  • martiDevo,

    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?


    lunes, 4 de julio de 2016 18:07
  • martiDevo,

    //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
    lunes, 4 de julio de 2016 18:08
  • martiDevo,

    //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 )

    lunes, 4 de julio de 2016 18:09
  • martiDevo,

    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. 

    lunes, 4 de julio de 2016 18:16
  • martiDevo,

    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

    lunes, 4 de julio de 2016 18:36
  • martiDevo,

    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.

    lunes, 4 de julio de 2016 18:41
  • martiDevo,

    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.

    gracias, cualquier duda vuelvo a este mismo post, o si es de otro tema creo otro, gracias!!!!!!!
    lunes, 4 de julio de 2016 18:47
  • martiDevo,

    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 ?

    lunes, 4 de julio de 2016 19:30