none
Consulta con Llenado de Entidades con c# windows Forms RRS feed

  • Pregunta

  • Estimada Comunidad,

    Tengo una inquietud:

    Si bien es cierto existe EF para que genere las clases y código para hacer el CRUD, yo he preferido codificar una a una tantos las entidades como el proceso CRUD, sin embargo tengo una duda:

    Si tengo una tabla CLIENTES y este tiene relacion con tablas tales como: SECTOR, TIPO_EMPRESA, GRUPO, EJECUTIVO, etc..

    debo hacer un SELECT por cada registro segun la llave y llenar su respectiva entidad. Esto no le quita rendimiento al hacer uno a UNO, talvez seria mejor hacer un solo QUERY para que obtener todos los datos??, estoy trabajando con 4 CAPAS: Entidad, Datos, Negocio y Presentacion.

    Y que pasa cuando tenga que traer una lista de movimientos en el cual estan involucrados varios clientes??

    De antemano gracias por sus comentarios

    martes, 26 de marzo de 2019 21:20

Todas las respuestas

  • debo hacer un SELECT por cada registro segun la llave y llenar su respectiva entidad. Esto no le quita rendimiento al hacer uno a UNO, talvez seria mejor hacer un solo QUERY para que obtener todos los datos??

    DEPENDE. Si sabes seguro que vas a necesitar todos los datos de la entidad cliente (el sector, tipo_empresa, grupo, etc.) desde la capa llamante entonces sí, es preferible hacer un único Select con un Join que lo traiga todo de golpe. Pero si vas a usar únicamente los datos principales y únicamente se requieren los datos de las tablas relacionadas en ciertos casos para ciertos reportes o ciertas pantallas especializadas, entonces es preferible que solo se haga el select principal y que los selects auxiliares solo se ejecuten en los casos particulares en los que se necesiten.

    Cuando esto se hace con EF, tienes la opción de seleccionar en cada caso si quieres la primera opción (se llama eager loading) o la segunda (lazy loading). Por defecto, si no dices nada, usa lazy loading, es decir, mientras no le digas lo contrario trae solo el select del registro principal y no hace los selects adicionales mientras no le pides que acceda a esos datos. Pero si le pides eager loading (por ejemplo, poniendo un "include" en la llamada), entonces ensambla automáticamente el "Join" de las tablas y lo trae todo de golpe con una sola Select.

    miércoles, 27 de marzo de 2019 7:45
    Moderador
  • hola

    >>debo hacer un SELECT por cada registro segun la llave y llenar su respectiva entidad

    no necesarimente, podrias aplicar la tecnica que menciono aqui

    n-Layer - SchoolManager - Herencia y navegación de entidades (2/2)

    veras que uso el INNER JOIN para relacionar las tablas y obtener la entidad y sus relaciones

    pero luego de tener los datos planos los agrupo usando linq y armar la jerarquia de navegacion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 27 de marzo de 2019 12:22
  • Gracias Alberto por tu aclaracion.
    miércoles, 27 de marzo de 2019 17:54
  • Super chevere Leandro, con el ejemplo que me diste ya me quedo claro como manejar este tipo de casos.

    Saludos

    miércoles, 27 de marzo de 2019 17:56