Tutorial Entity Framework y Linq (Parte 2)

En la Entrada anterior desarrollamos el esqueleto de nuestra aplicación en capas, pueden ver la entrada aquí:
Parte 1

En la parte 2 desarrollaremos la capa Entities y la capa DataAccess.

Desarrollando la capa Entities:

Lo primero será agregar 2 clases en la capa Entities con nombres:

  • FacturaCab_Ent
  • FacturaDet_Ent
La clase FacturaCab_Ent contendrá las siguientes propiedades privadas y públicas, recuerda escribir "prop" y luego presiona tab 2 veces para que se te genere el código automáticamente.


    Private _IdFactura As Integer
    Public Property IdFactura() As Integer
        Get
            Return _IdFactura
        End Get
        Set(ByVal value As Integer)
            _IdFactura = value
        End Set
    End Property

    Private _CodCliente As String
    Public Property CodCliente() As String
        Get
            Return _CodCliente
        End Get
        Set(ByVal value As String)
            _CodCliente = value
        End Set
    End Property

    Private _FechaFact As DateTime
    Public Property FechaFact() As DateTime
        Get
            Return _FechaFact
        End Get
        Set(ByVal value As DateTime)
            _FechaFact = value
        End Set
    End Property

    Private _ValorFact As Double
    Public Property ValorFact() As Double
        Get
            Return _ValorFact
        End Get
        Set(ByVal value As Double)
            _ValorFact = value
        End Set
    End Property

La clase FacturaDet_Ent contendrá las siguientes propiedades privadas y públicas:



Private _IdFactura As Integer
    Public Property IdFactura() As Integer
        Get
            Return _IdFactura
        End Get
        Set(ByVal value As Integer)
            _IdFactura = value
        End Set
    End Property

    Private _Secuencia As Integer
    Public Property Secuencia() As Integer
        Get
            Return _Secuencia
        End Get
        Set(ByVal value As Integer)
            _Secuencia = value
        End Set
    End Property

    Private _CodProducto As String
    Public Property CodProducto() As String
        Get
            Return _CodProducto
        End Get
        Set(ByVal value As String)
            _CodProducto = value
        End Set
    End Property

    Private _DescProducto As String
    Public Property DescProducto() As String
        Get
            Return _DescProducto
        End Get
        Set(ByVal value As String)
            _DescProducto = value
        End Set
    End Property

    Private _Cantidad As Double
    Public Property Cantidad() As Double
        Get
            Return _Cantidad
        End Get
        Set(ByVal value As Double)
            _Cantidad = value
        End Set
    End Property

    Private _Precio As Double
    Public Property Precio() As Double
        Get
            Return _Precio
        End Get
        Set(ByVal value As Double)
            _Precio = value
        End Set
    End Property

    Private _Total As Double
    Public Property Total() As Double
        Get
            Return _Total
        End Get
        Set(ByVal value As Double)
            _Total = value
        End Set
    End Property

Desarrollando la capa DataAccess:

Lo primero será crear nuestro Entity Model con los siguientes pasos:
1. Agregar en nuestro proyecto un nuevo item "ADO.NET Entity Data Model" y darle nombre "ModelVentas.edmx", dar clic en agregar.



2. Elegir la opción "Generate from database" y dar clic en siguiente.
3. Configurar una nueva conexión (o utilizar una existente), escoger la conexión creada o existente y darle en la opción "Si, incluir datos sensitivos en la cadena de conexión", darle nombre "EntitiesVentas", luego clic en siguiente.

4. Agregar las tablas de cabecera de factura y detalle, dar nombre al NameSpace "ModelVentas" clic en finalizar.

5. Notarás que en tu proyecto se generó un Entity model "ModelVentas.edmx" y un  archivo de configuración "App.Config".

Ahora hay que crear las clases que tendrán los métodos de acceso al Entity Model y este a su vez ya se encarga de comunicarse con la base de datos para hacer los selects, inserts, updates, deletes, etc

6. Agregar 2 clases

  • FacturaCab_Data.vb
  • FacturaDet_Data.vb
Escribir en cada clase los métodos para recuperar, grabar, actualizar y borrar información. Para este caso se usará LINQ.

La clase FacturaCab_Data.vb tendrá el siguiente código:
Imports Entities
Public Class FacturaCab_Data
    Public Function RecuperarTodas() As List(Of FacturaCab_Ent)
        Using OEntidad As New EntitiesVentas
            Dim query = From facturas In OEntidad.Vtas_Factura_Cab
                         Select facturas

            Dim lista As New List(Of FacturaCab_Ent)
            For Each item In query
                Dim info As New FacturaCab_Ent()
                info.IdFactura = item.IdFactura
                info.CodCliente = item.CodCliente
                info.FechaFact = item.FechaFact
                info.ValorFact = item.ValorFact
                lista.Add(info)
            Next
            Return lista
        End Using
    End Function

    Public Function BuscarUna(ByVal codigoFactura As Integer) As FacturaCab_Ent
        Using OEntidad As New EntitiesVentas
            Dim query = From facturas In OEntidad.Vtas_Factura_Cab
                           Where facturas.IdFactura = codigoFactura
                           Select facturas

            Return query
        End Using
    End Function

    Public Function Inserta(ByVal factura As FacturaCab_Ent) As Boolean
        Try
            Using OEntidad As New EntitiesVentas
                Dim tbFactura As New Vtas_Factura_Cab
                tbFactura.IdFactura = factura.IdFactura
                tbFactura.CodCliente = factura.CodCliente
                tbFactura.FechaFact = factura.FechaFact
                tbFactura.ValorFact = factura.ValorFact
                OEntidad.Vtas_Factura_Cab.AddObject(tbFactura)
                OEntidad.SaveChanges()
            End Using
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

    Public Function Modifica(ByVal factura As FacturaCab_Ent) As Boolean
        Try
            Using OEntidad As New EntitiesVentas()
                Dim query = (From fa In OEntidad.Vtas_Factura_Cab
                            Where fa.IdFactura = factura.IdFactura
                            Select fa).Single()

                query.IdFactura = factura.IdFactura
                query.CodCliente = factura.CodCliente
                query.FechaFact = factura.FechaFact
                query.ValorFact = factura.ValorFact
                OEntidad.SaveChanges()
            End Using
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

    Public Function Elimina(ByVal CodFactura As Integer) As Boolean
        Try
            Using OEntidad As New EntitiesVentas
                Dim recupera = From facturas In OEntidad.Vtas_Factura_Cab
                               Where facturas.IdFactura = CodFactura
                               Select facturas

                For Each item In recupera
                    OEntidad.Vtas_Factura_Cab.DeleteObject(item)
                Next
                OEntidad.SaveChanges()
            End Using
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function
End Class

La clase FacturaDet_Data.vb tendrá el siguiente código:
Imports Entities
Public Class FacturaDet_Data
    Public Function BuscarUna(ByVal codigoFactura As Integer) As List(Of FacturaDet_Ent)
        Using OEntidad As New EntitiesVentas
            Dim query = From facturas In OEntidad.Vtas_Factura_Det
                           Where facturas.IdFactura = codigoFactura
                           Select facturas

            Dim lista As New List(Of FacturaDet_Ent)
            For Each item In query
                Dim det As New FacturaDet_Ent
                det.IdFactura = item.IdFactura
                det.Secuencia = item.Secuencia
                det.CodProducto = item.CodProducto
                det.DescProducto = item.DescProducto
                det.Cantidad = item.Cantidad
                det.Precio = item.Precio
                det.Total = item.Total
                lista.Add(det)
            Next
            Return lista
        End Using
    End Function

    Public Function Inserta(ByVal Detfactura As List(Of FacturaDet_Ent)) As Boolean
        Try
            Using OEntidad As New EntitiesVentas
                For Each item In Detfactura
                    Dim tbDetFactura As New Vtas_Factura_Det
                    tbDetFactura.IdFactura = item.IdFactura
                    tbDetFactura.Secuencia = item.Secuencia
                    tbDetFactura.CodProducto = item.CodProducto
                    tbDetFactura.DescProducto = item.DescProducto
                    tbDetFactura.Cantidad = item.Cantidad
                    tbDetFactura.Precio = item.Precio
                    tbDetFactura.Total = item.Total
                    OEntidad.Vtas_Factura_Det.AddObject(tbDetFactura)
                Next
                OEntidad.SaveChanges()
            End Using
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

    Public Function Modifica(ByVal Detfactura As List(Of FacturaDet_Ent), ByVal CodFactura As Integer) As Boolean
        Try
            Using OEntidad As New EntitiesVentas()
                If Elimina(CodFactura) And Inserta(Detfactura) Then
                    Return True
                Else
                    Return False
                End If
            End Using
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

    Public Function Elimina(ByVal CodFactura As Integer) As Boolean
        Try
            Using OEntidad As New EntitiesVentas
                Dim recupera = From facturas In OEntidad.Vtas_Factura_Det
                               Where facturas.IdFactura = CodFactura
                               Select facturas

                For Each item In recupera
                    OEntidad.Vtas_Factura_Det.DeleteObject(item)
                Next
                OEntidad.SaveChanges()
            End Using
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function
End Class

Posteriormente vamos con capa Business Layer en la Parte 3

Comentarios