none
clases - vista a mostrar, manejo de entidades RRS feed

  • Pregunta

  • clases  y vista a mostrar
    he generado dos clases en mi capa entidad

    class entidad1
    public property codigoE1 as int
    public property dato1 as string
    public property dato2 as string
    public property dato3 as string

    end
    class entidad2
    public property codigoE2 as int
    public property dato4 as string
    public property dato5 as string
    public property dato6 as string
    public property codigoE1 as int
    end

    Ahora tengo que realizar una consulta en sql uniendo esta tablas

    create procedure  getvistaentidad
    select codigoE1,dato1,dato2,dato3,dato4,dato5,dato6 from  entidad1
    inner join entidad2 on  entidad1.codigoE1=entidad2.codigoE2


    Ahora en mi capa de datos hago lo siguiente.
    lo que esta en ------ significa que no se que poner entidad1 o entidad2
    o como manejarlo,  para poder devolver mi lista

        Public Function getvistaentidad() As List(Of -------)
            Using cnx As New SqlConnection(SringCnn)
                Dim ListaBE As New List(Of ------)()
                Using cmd As New SqlCommand
                    Dim dr As SqlDataReader
                    cmd.Connection = cnx
                    cmd.CommandType = CommandType.StoredProcedure
                    cmd.CommandText = "getvistaentidad"
                    cnx.Open()
                    dr = cmd.ExecuteReader
                    Dim BE As ------
                    While dr.Read()
                        BE = New ------
                        With BE
                            BE.codigoE1 = If(dr.IsDBNull(0), Nothing, dr("codauto"))
                            BE.dato1 = If(dr("dato1") Is DBNull.Value, Nothing, dr("dato1"))
                            BE.dato2 = If(dr("dato2") Is DBNull.Value, Nothing, dr("dato2"))
                            BE.dato3 = If(dr("dato3") Is DBNull.Value, Nothing, dr("dato3"))
                            BE.dato4 = If(dr("dato4") Is DBNull.Value, Nothing, dr("dato4"))
                            BE.dato5 = If(dr("dato5") Is DBNull.Value, Nothing, dr("dato5"))
                            BE.dato6 = If(dr("dato6") Is DBNull.Value, Nothing, dr("dato6"))
                        End With
                        ListaBE.Add(BE)
                    End While
                    dr.Close()
                    Return ListaBE
                End Using
            End Using
        End Function

    QUIERO MATAR ESTA DUDA ... ANTES QUE EL MUNDO DEJE DE EXISTIR..

    jueves, 25 de junio de 2015 20:29

Todas las respuestas

  • hola

    cuando defines el SELECT deberias indicar de que tabla sale cada campo

    ademas entre las clase no veo que tengan ninguna relacion entre ellas

    podrias implementar una jerarquia usando algo como ser

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

    como veras alli se usa linq para poder agrupar y realizar la jerarquia de datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 25 de junio de 2015 20:45
  • corrigo mi procedure, su relacion es codigoE1

    create procedure  getvistaentidad
    select entidad1.codigoE1,dato1,dato2,dato3,dato4,dato5,dato6 from  entidad1
    inner join entidad2 on  entidad1.codigoE1=entidad2.codigoE1

    en las clases la relacion es  codigoE1

    QUIERO MATAR ESTA DUDA ... ANTES QUE EL MUNDO DEJE DE EXISTIR..

    jueves, 25 de junio de 2015 20:58
  • hola

    pero que relacion hay entre las clases "entidad1"  y "entidad2" ?

    porque lo que veo es que estas clases solo definen campos int y string no veo que uses algo como ser

    public class entidad1

       Public Property entidad2 As Entidad2

    End class

    para que de una entidad navegues a la segunda

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    jueves, 25 de junio de 2015 21:13
  • capa entidad
    ------------
    cada entidad es una copia de mi tabla de bd
    relacion asociancion de 1 a muchos 
    el codigoE1 de la class entidad2 quedaria asi?



    Class entidad1
    public property codigoE1 as int
    public property dato1 as string
    public property dato2 as string
    public property dato3 as string
    public property entidad2 as entidad2
    end

    Class entidad2
    public property codigoE2 as int
    public property dato4 as string
    public property dato5 as string
    public property dato6 as string
    public property codigoE1 as int
    end

    si es asi, la capa de datos quedaria asi.

    capa datos
    ----------
        Public Function getvistaentidad() As List(Of entidad1)
            Using cnx As New SqlConnection(SringCnn)
                Dim ListaBE As New List(Of entidad1)()
                Using cmd As New SqlCommand
                    Dim dr As SqlDataReader
                    cmd.Connection = cnx
                    cmd.CommandType = CommandType.StoredProcedure
                    cmd.CommandText = "getvistaentidad"
                    cnx.Open()
                    dr = cmd.ExecuteReader
                    Dim BE As ------
                    While dr.Read()
                        BE = New entidad1
                        With BE

                            BE.codigoE1 = If(dr.IsDBNull(0), Nothing, dr("codauto"))
                            BE.dato1 = If(dr("dato1") Is DBNull.Value, Nothing, dr("dato1"))
                            BE.dato2 = If(dr("dato2") Is DBNull.Value, Nothing, dr("dato2"))
                            BE.dato3 = If(dr("dato3") Is DBNull.Value, Nothing, dr("dato3"))
                            be.entidad2.dato4 = If(dr("dato4") Is DBNull.Value, Nothing, dr("dato4"))
                            be.entidad2.dato5 = If(dr("dato5") Is DBNull.Value, Nothing, dr("dato5"))
                            be.entidad2.dato6 = If(dr("dato6") Is DBNull.Value, Nothing, dr("dato6"))
                        End With
                        ListaBE.Add(BE)
                    End While
                    dr.Close()
                    Return ListaBE
                End Using
            End Using
        End Function

    QUIERO MATAR ESTA DUDA ... ANTES QUE EL MUNDO DEJE DE EXISTIR..

    jueves, 25 de junio de 2015 21:37
  • hola

    bueno ahora si veo la propiedad

    public property entidad2 as entidad2

    pero el tema es que para poder crear una jerarquia necesitas usar linq, ya que seria mas simple para poder darle una estructura a los datos que recuperas

    la verdad es que el ejemplo del articulo no lo tengo implementado en vb.net

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 25 de junio de 2015 22:02
  • pero así como esta planteado esta mal?

    o que es lo que falta realizar?
    pues ahora desde mi capa de datos puedo acceder sin problemas.

    QUIERO MATAR ESTA DUDA ... ANTES QUE EL MUNDO DEJE DE EXISTIR..

    jueves, 25 de junio de 2015 22:18
  • hola

    no analice el modelo de forma detallada, pero que tipo de relacion hay entre la entidad1 y 2 ? es una relacion uno a uno o es de muchos a uno

    porque si es de uno a muchos en la clase deberias definir

    Public Class entidad1

      public property entidad2List as List(Of entidad2)

    End Class

    o sea es una lista, por eso es que requieres agrupar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 26 de junio de 2015 2:19
  • Hola Leandro:

    Si ya te había respondido

    relación asociación de uno  a muchos 

    por lo que entiendo..  si la relacion fuera de 1 a 1

    public property entidad2 as entidad2

    si es de uno a muchos

     public property entidad2List as List(Of entidad2)

    Y mi capa de datos estaria asi :

    capa datos
    ----------
        Public Function getvistaentidad() As List(Of entidad1)
            Using cnx As New SqlConnection(SringCnn)
                Dim ListaBE As New List(Of entidad1)()
                Using cmd As New SqlCommand
                    Dim dr As SqlDataReader
                    cmd.Connection = cnx
                    cmd.CommandType = CommandType.StoredProcedure
                    cmd.CommandText = "getvistaentidad"
                    cnx.Open()
                    dr = cmd.ExecuteReader
                    Dim BE As ------
                    While dr.Read()
                        BE = New entidad1
                        With BE

                            BE.codigoE1 = If(dr.IsDBNull(0), Nothing, dr("codauto"))
                            BE.dato1 = If(dr("dato1") Is DBNull.Value, Nothing, dr("dato1"))
                            BE.dato2 = If(dr("dato2") Is DBNull.Value, Nothing, dr("dato2"))
                            BE.dato3 = If(dr("dato3") Is DBNull.Value, Nothing, dr("dato3"))
                            be.entidad2List.dato4 = If(dr("dato4") Is DBNull.Value, Nothing, dr("dato4"))
                            be.entidad2List.dato5 = If(dr("dato5") Is DBNull.Value, Nothing, dr("dato5"))
                            be.entidad2List.dato6 = If(dr("dato6") Is DBNull.Value, Nothing, dr("dato6"))
                        End With
                        ListaBE.Add(BE)
                    End While
                    dr.Close()
                    Return ListaBE
                End Using
            End Using
        End Function

    eso es correcto?


    QUIERO MATAR ESTA DUDA ... ANTES QUE EL MUNDO DEJE DE EXISTIR..

    viernes, 26 de junio de 2015 2:36
  • hola

    >>por lo que entiendo..  si la relacion fuera de 1 a 1

    ahh ok entonces esta correcto como lo implementas, no hace falta que definas el list como indique en la respuesta anterior

    quizas el unico detalle seria que debes instanciar la propiedad usando la linea

    be.entidad2 = New entidad2()
    
    be.entidad2.dato4 = If(dr("dato4") Is DBNull.Value, Nothing, dr("dato4"))
    
    'resto
    sino haces el new de la clase no podras acceder a las propiedades

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 26 de junio de 2015 10:51
  • cuando en la clase entidad 1 definí:
     
    public property entidad2 as entidad2

    ya despues en mi capa de datos solo instanceando
    el   
    BE = New entidad1
    puede ACCEDER A :
    BE.entidad2.dato4 = If(dr("dato4") Is DBNull.Value, Nothing, dr("dato4"))
    BE.entidad2.dato5 = If(dr("dato5") Is DBNull.Value, Nothing, dr("dato5"))
    BE.entidad2.dato6 = If(dr("dato6") Is DBNull.Value, Nothing, dr("dato6"))

    Pero ahora me dice que tengo que intanciar be.entidad2 = New entidad2() ???
    entonces que devolveria mi funcion ? un list(of entidad1)  o un list(of entidad2)
    Public Function getvistaentidad() As List(Of entidad1)




    Class entidad1
    public property codigoE1 as int
    public property dato1 as string
    public property dato2 as string
    public property dato3 as string
    public property entidad2 as entidad2
    end

    Class entidad2
    public property codigoE2 as int
    public property dato4 as string
    public property dato5 as string
    public property dato6 as string
    public property codigoE1 as int
    end

    si es asi, la capa de datos quedaria asi.

    capa datos
    ----------
        Public Function getvistaentidad() As List(Of entidad1)
            Using cnx As New SqlConnection(SringCnn)
                Dim ListaBE As New List(Of entidad1)()
                Using cmd As New SqlCommand
                    Dim dr As SqlDataReader
                    cmd.Connection = cnx
                    cmd.CommandType = CommandType.StoredProcedure
                    cmd.CommandText = "getvistaentidad"
                    cnx.Open()
                    dr = cmd.ExecuteReader
                    Dim BE As ------
                    While dr.Read()
                        BE = New entidad1
                        With BE

                            BE.codigoE1 = If(dr.IsDBNull(0), Nothing, dr("codauto"))
                            BE.dato1 = If(dr("dato1") Is DBNull.Value, Nothing, dr("dato1"))
                            BE.dato2 = If(dr("dato2") Is DBNull.Value, Nothing, dr("dato2"))
                            BE.dato3 = If(dr("dato3") Is DBNull.Value, Nothing, dr("dato3"))
                            be.entidad2.dato4 = If(dr("dato4") Is DBNull.Value, Nothing, dr("dato4"))
                            be.entidad2.dato5 = If(dr("dato5") Is DBNull.Value, Nothing, dr("dato5"))
                            be.entidad2.dato6 = If(dr("dato6") Is DBNull.Value, Nothing, dr("dato6"))
                        End With
                        ListaBE.Add(BE)
                    End While
                    dr.Close()
                    Return ListaBE
                End Using
            End Using
        End Function

    QUIERO MATAR ESTA DUDA ... ANTES QUE EL MUNDO DEJE DE EXISTIR..

    viernes, 26 de junio de 2015 15:16
  • hola

    >>Pero ahora me dice que tengo que intanciar be.entidad2 = New entidad2() ??? entonces que devolveria mi funcion ? un list(of entidad1)  o un list(of entidad2)

    una lista de entidad1

    ya que la entidad2 esta contenida dentro de la 1

    necesitas instanciar la entidad2 porque defines una propiedad de un tipo de una clase

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 26 de junio de 2015 17:09
  •  Es juntamente esta parte que no entiendo:
    me dice que intance la entidad2
    bueno si lo instancio quedara asi
    pero no puedo cargar mi list de los dato4,dato5,dato5
    o como hago para que los datos de b2 se cargen a mi listabe,
    pues mi table sale como datos no definidos


                    Dim BE As entidad1
                    Dim BE2 AS entidad2
                    While dr.Read()
                        BE = New entidad1
                        BE2 = New entidad2
                        With BE

                            BE.codigoE1 = If(dr.IsDBNull(0), Nothing, dr("codauto"))
                            BE.dato1 = If(dr("dato1") Is DBNull.Value, Nothing, dr("dato1"))
                            BE.dato2 = If(dr("dato2") Is DBNull.Value, Nothing, dr("dato2"))
                            BE.dato3 = If(dr("dato3") Is DBNull.Value, Nothing, dr("dato3"))
                            be2.dato4 = If(dr("dato4") Is DBNull.Value, Nothing, dr("dato4"))
                            be2.dato5 = If(dr("dato5") Is DBNull.Value, Nothing, dr("dato5"))
                            be2.dato6 = If(dr("dato6") Is DBNull.Value, Nothing, dr("dato6"))
                        End With
                        ListaBE.Add(BE)
                    End While
                    dr.Close()
                    Return ListaBE

    por otro lado si defino solamente como instancia a
     BE = New entidad1
     be.entidad1.dato4 = If(dr("dato4") Is DBNull.Value, Nothing, dr("dato4"))

    al ejecutar.. me sale referencia a objeto no establecida como instancia

    QUIERO MATAR ESTA DUDA ... ANTES QUE EL MUNDO DEJE DE EXISTIR..

    viernes, 26 de junio de 2015 20:05
  •  la instancia en la la capa entidad ?

    public property entidad2 as new entidad2

    pues si es asi.. si resulta (ya no sale error de referencia de un objeto) los datos se me comienzan a mostrar, 
    al cargar mi table
     be.entidad2.dato4 = If(dr("dato4") Is DBNull.Value, Nothing, dr("dato4"))

    es asi es lo correcto?

    QUIERO MATAR ESTA DUDA ... ANTES QUE EL MUNDO DEJE DE EXISTIR..

    viernes, 26 de junio de 2015 20:22