Public Class telefonosBll
  Public Sub New()
  End Sub

  Public Function ObtenerTfnoBll(tf As String) As telefono
    Using contexto As New bd_telefonos3Entities()
      Dim consulta = From tfno In contexto.telefonos
                     Where tfno.telefono1 = tf
                     Select tfno
      Dim registro As telefono = consulta.First()
      contexto.Detach(registro)
      Return registro
    End Using
  End Function

  Public Function ObtenerTfnosBll() As List(Of Detalles)
    Using contexto As New bd_telefonos3Entities()
      Dim consulta = From persona In contexto.telefonos
                     Select New With {persona.apellido1,
                                      persona.telefono1}
      Dim lista As New List(Of Detalles)()
      For Each e In consulta
        lista.Add(New Detalles(e.apellido1, e.telefono1))
      Next e
      Return lista
    End Using
  End Function

  Public Sub ActualizarTfnoBll(entidad As telefono)
    Using contexto As New bd_telefonos3Entities()
      ' Obtener una entidad conectada con la clave especificada,
      ' aplicar los cambios y salvarlos en la base de datos
      contexto.VincularObjeto(entidad) ' método extensor
      contexto.SaveChanges()
    End Using
  End Sub

  Public Sub AgregarTfnoBll(entidad As telefono)
    Using contexto As New bd_telefonos3Entities()
      ' Si no hay una entidad con el mismo teléfono, añadirla
      ' al contexto actual y salvar los cambios
      If ExisteTelefono(entidad, contexto) IsNot Nothing Then
        Throw New InvalidOperationException("El teléfono existe")
      End If
      contexto.telefonos.AddObject(entidad)
      contexto.SaveChanges()
    End Using
  End Sub

  Public Sub BorrarTfnoBll(entidad As telefono)
    Using contexto As New bd_telefonos3Entities()
      Try
        ' Obtener la entidad conectada correspondiente, borrarla
        ' del contexto actual y salvar los cambios
        entidad = ExisteTelefono(entidad, contexto)
        If entidad Is Nothing Then
          Throw New InvalidOperationException("El teléfono no existe")
        End If
        contexto.DeleteObject(entidad)
        contexto.SaveChanges()
      Catch ex As OptimisticConcurrencyException
        Throw New InvalidOperationException(
          "El elemento especificado no puede ser borrado")
      End Try
    End Using
  End Sub

  Private Function ExisteTelefono(entidad As telefono, contexto As bd_telefonos3Entities) As telefono
    Try
      Dim consulta = From tfno In contexto.telefonos
                     Where tfno.telefono1 = entidad.telefono1
                     Select tfno
      Dim registro As telefono = consulta.First()
      Return registro
    Catch e1 As Exception
      Return Nothing
    End Try
  End Function
End Class
