Imports System.Data.Objects.DataClasses
Imports System.Data.Objects

' bd_telefonos2EntitiesEx (métodos extensores): extensión a bd_telefonos2Entities derivada de ObjectContext
Public Module bd_telefonos2EntitiesEx

  <System.Runtime.CompilerServices.Extension()>
  Public Sub VincularObjeto(ByVal contex As bd_telefonos3Entities, ByVal entDesvinculada As telefono)
    If entDesvinculada.EntityState = System.Data.EntityState.Detached Then
      Dim entActualEnBD As Object = Nothing
      ' Obtener una entidad conectada con la clave especificada
      If contex.TryGetObjectByKey(entDesvinculada.EntityKey, entActualEnBD) Then
        ' Aplicar los cambios registrados en la entidad desconectada a la conectada
        ' contex.ApplyPropertyChanges(entDesvinculada.EntityKey.EntitySetName, entDesvinculada) ' obsoleta
        contex.ApplyCurrentValues(entDesvinculada.EntityKey.EntitySetName, entDesvinculada)
        ' Establecer las relaciones de la entidad desconectada en la conectada
        ' invocando al método extensor:
        contex.AplicarCambiosATodasEntidades(DirectCast(entDesvinculada, IEntityWithRelationships),
                                             DirectCast(entActualEnBD, IEntityWithRelationships))
      Else
        Throw New ExceptionEntidadNoExiste("La entidad no existe")
      End If
    End If
  End Sub

  <System.Runtime.CompilerServices.Extension()>
  Public Sub AplicarCambiosATodasEntidades(ByVal context As ObjectContext,
  ByVal entidadNueva As IEntityWithRelationships, ByVal entidadVieja As IEntityWithRelationships)
    ' Obtener las relaciones con otras entidades de la entidad desconectada
    For Each extremoRelacionado In entidadVieja.RelationshipManager.GetAllRelatedEnds()
      Dim refVieja = TryCast(extremoRelacionado, EntityReference)
      If refVieja IsNot Nothing Then
        ' Establecer las relaciones obtenidas en la entidad conectada
        Dim refNueva = TryCast(entidadNueva.RelationshipManager.GetRelatedEnd(refVieja.RelationshipName, refVieja.TargetRoleName), EntityReference)
        refVieja.EntityKey = refNueva.EntityKey
      End If
    Next
  End Sub
End Module
