none
trabajando con varias entidades RRS feed

  • Pregunta

  • Amigos nuevamente recurro a ustedes por que no logro comprender varias cosas ya que el EF me marea un tanto pero no tanto.. :P

    La pregunta que tengo es como trabajamos con varias entidades.

    osea tengo una libreria.. que es la que maneja todo la logica de conexion con la base de datos osea como una capa de acceso a los datos. ahi es donde hago el modelado y todo lo concerniente a la base de datos.

    ahora ahi el problema por que nunca se trabaja con una sola entidad sino con varias y como paso esas varias entidades a mi clase principal.

    osea tengo todo en una sola ventana que es el main y en ese solo cargo UserControls y obviamente todo los datos se saca de la libreria de la capa que comente arriba alguien me podria guiar un poco mas de como hacer las cosas.. ?

    por que por lo general antes solamente pasaba datasets y listo pero ahora quiero trabajar con EF4.0 gracias.. :D por su tiempo..


    J. Fernando Galvez V. e-mail : fer_bolivia@hotmail.com skype : karnash
    lunes, 26 de abril de 2010 21:26

Todas las respuestas

  • Lord, Primero el modeo de ADO.NET Entity Framework, rompe el modelo de trabajo offline (traer todos los datos al cliente), trabajarlos y volverlos a enviar. El trabajo con Entity Framework, es más por operación que recuperar varias entidades. Me explico abajo

    Siempre la información se muestra en unidad o en lote de registros.

    Ejemplo, tienes dos UserControls:

    1. Un control que muestra la información de tu perfil (haces un getOneByID de tu tabla de perfiles). Eso lo cargas en tu load de tu control de usuario.
    2. Un control que muestra la información de las últimas 10 noticias (haces un getManyByFilter a tu tabla de noticias). Eso lo cargas en el load de control de usuario.

    Se están cargando varios controles de usuarios, con información de varias entidades.

    Ahora si tu pregunta es sobre tablas relacionadas, puedes usar InnerJoins en tus consultas de Entity Framework.

    Saludos,


    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    lunes, 26 de abril de 2010 21:46
  • claro eso seria lindo cuando es una sola entidad relacionada pero cuando tengo que presentar un mix de entidades ademas que no estan en el mismo control sino que estan como dije en un window como lo haria. ? esa es mi pregunta...

    osea como manejar varias entidades y poderlas pasar de una lado a otro ... osea validar y hacer la consulta con EF en el UserControl , y esos datos mostrarlos en otro Usercontrol que esta en el window  ese es mi problema como manejar eso.. :$ gracias por su tiempo.. :D


    J. Fernando Galvez V. e-mail : fer_bolivia@hotmail.com skype : karnash
    lunes, 26 de abril de 2010 22:05
  • Wait... cuando hables de UserControls olvidate de EF, hablemos sólo de objetos. EF empieza o muere, cuando quieres recuperar datos o quieres insertar datos.

    Si comentas uno de tus escenarios (es un maestro detalle o que es?).

    Si quieres mostrar un mix de entidades estas hablando de mostrar en una sola grilla eso?. O vas a mostrar información por ejemplo una entidad del tipo de cambio, otra entidad de datos pendientes, y así. ¿Qué es eso de mix de entidades?, por favor comenta tu caso.

    Cuando tus datos esten mostrados, murio EF, ahora són solo datos. Si quieres pasar datos u objetos de un userControl a otro, lo haces a través de métodos.

    Comentado tu escenario, te vamos a entender mejor.

    Saludos,


    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    lunes, 26 de abril de 2010 22:14
  • ok gracias por tu tiempo antes que nada.

    el ejemplo que te doy es el siguiente. tengo un usuario que tiene roles,permisos. cada una es una tabla. hago un login con el usuario. ahora deseo mostrar en un main osea la ventana principal todos los datos osea USUARIO, ROLES, PERMISOS lo hago con linq. pero el problema es que todo esta en una libreria. y no se como poder pasar esos datos al main. y mostrarlo o tenerlos ahi ya que todo el sistema se basa en el movimiento que haga el usuario.. :$ espero que me hayan comprendido. millon de gracias por su tiempo.


    J. Fernando Galvez V. e-mail : fer_bolivia@hotmail.com skype : karnash
    martes, 27 de abril de 2010 15:04
  • Me falta un pregunta: Windows o Web?

    A ver, el usuario con que vas a ingresar es un administrador? Por eso va poder listar todos los usuarios permisos y roles?

    Mira para enteder tu flujo, tu MAIN es el que controla la aplicación, entonces tu main es quien llama a tu librería, no veas a tu librería como un punto de partida, si no como un recurso. Pero mas o menos, cada vez que se cargue el main, consulta a tu clase de acceso a datos y recupera la información que desees. En tu caso, normalmente yo lo resuelve de la siguiente manera, tendria tres ventanas una para mantener los usuarios, otra los roles, y otra los permisos. Todas estas enlazadas, si es windows por el constructor, y si es web por QueryString.

    ¿En que tipo de control deseas mostrar la información? Si es un control de usuario (que contrles tiene tu control de usuario)

    Saludos,


    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    martes, 27 de abril de 2010 19:10
  • y ese llamado constante a la base de datos no seria consumir recursos ??

    y toy trabajando con aplicaciones de windows no web.

    asi que lo mas proximo seria manejar usuarios con sesiones..:P

    ademas que como es un login solo deberia pedir una vez los datos.  y luego mantenerlos como dije antes como si fuera una sesion.. :D


    J. Fernando Galvez V. e-mail : fer_bolivia@hotmail.com skype : karnash
    martes, 27 de abril de 2010 19:33
  • Depende del tipo sistemas que necesites, si necesitas un sistema online (transaccional), siempre vas a tener que estar iendo a la base de datos para recuperar la información mas reciente (es la forma de garantizar la integridad de la información).

    Por otro lado, si necesitas un ambiente desconectado, no necesitas entity Framework, mejor usa DataSets.

    Por otro lado, si quieres usar todavía Entity Framework con un modelo desconectado, tendrías que cargar en tu aplicación principal (lo que llamas MAIN), variables de Listas, y tu caso sería tres List<Usuario>, List<Rol>, List<Permisos>, entonces en el load de tu MAIN, cargan esas tres variables (llamando a tu librería).

    Y en el resto de tu aplicación sólo llamas a esas tres variables (donde esta toda tu información).

    Saludos,


    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    martes, 27 de abril de 2010 19:43
  • obviamente que todo es conectado al servidor sql server y trabajara en red... y mi idea era modularizar todo el acceso a la base de datos asi qeu me cree una clase que hace toda la consulta con linq.

    pero ahora el problema es que tipo de dato debo retornar para manerjarlo en otra clase.

    y que tipo de dato recibo claro obviamente que la consulta linq esta de 3 tablas y solo quiero enviarlo asi.. :D gracias.


    J. Fernando Galvez V. e-mail : fer_bolivia@hotmail.com skype : karnash
    martes, 27 de abril de 2010 19:50
  • Yo lo haría en tres consultas distintas. En un maín tendría primero una lista principal de usuarios (sería mejor que pagines el método, es solo una idea), y un botón que llame a otro form o una lista para ver los roles de un usuario, entonces ahi llamo a mi segunda consulta (ahí y sólo ahí, cuando lo pida el usuario)

    Usar EntityFramework es jugar con listas.

    public class SeguridadRepository
    {
      public List<Usuarios> getUsuarios() {
         using (XYZEntities model = new XYZEntities()) {
           return (from u in model.Usuarios
                select u).ToList();
         }
      }
     
      public List<Roles> getRolesByUser(String UserID) {
         using (XYZEntities model = new XYZEntities()) {
           return (from r in model.Roles
                where r.UserID = UserID
                select r).ToList();
         }
      }
    
      //..asi para permisos
    
    }

    Saludos,


    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    martes, 27 de abril de 2010 19:58