Establecer claves externas en Linq a SQL

Es bien sabido que no puede establecer ID de clave externa directamente en Linq a SQL si las entidades ya se han cargado. Sin embargo, puede buscar la entidad por su clave externa y luego establecer la entidad como la entidad externa utilizando la relación de entidad. (Saqué la enumeración aquí y usé valores enteros para simplificar). es decir, si tengo una entidad de cita cargada y una entidad de estado de cita asociada no puedo hacer esto: -

ExistingAppointment.AppointmentStatusID = 7

Pero puedo hacer esto: -

ExistingAppointment.AppointmentStatus = (From appstat In db.AppointmentStatus _
                                        Where appstat.StatusID = 7 _
                                        Select appstat).Single

Tengo este tipo de cosas ensuciando mi código y me gustaría refactorizar. Entonces...

Obviamente, podría usar un método auxiliar en un módulo como este:


Module Helper
    Public Shared Function GetAppointmentStatus(ByVal AppStatusID As Integer) As AppointmentStatus
        GetAppointmentStatus = (From appstat In db.AppointmentStatus _
                                       Where appstat.AppointmentStatusID = AppStatus _
                                       Select appstat).Single
    End Function
End Module

Incluso podría convertir esto en un método de extensión, como este.


Imports System.Runtime.CompilerServices
Module Helper
Extension()> _
    Public Shared Function GetAppointmentStatus(ByVal db as DataClassesDataContext, ByVal AppStatusID As Integer) As AppointmentStatus
        GetAppointmentStatus = (From appstat In db.AppointmentStatus _
                                       Where appstat.AppointmentStatusID = AppStatusID _
                                       Select appstat).Single
    End Function
End Module

También podría poner esto en la clase parcial Linq to SQL, como esta.


Partial Public Class DataClassesDataContext    
    Public Function GetAppointmentStatus(ByVal AppStatusID As Integer) As AppointmentStatus
        GetAppointmentStatus = (From appstat In Me.AppointmentStatus _
                                       Where appstat.AppointmentStatusID = AppStatusID _
                                       Select appstat).Single
    End Function
End Class

Además, podría poner el código en la clase parcial Entidad de citas Linq to SQL de esta manera:


Partial Public Class Appointment    
    Public Function GetAppointmentStatus(ByVal db as DataClassesDataContext, ByVal AppStatusID As Integer) As AppointmentStatus
            GetAppointmentStatus = (From appstat In db.AppointmentStatus _
                                       Where appstat.AppointmentStatusID = AppStatusID _
                                       Select appstat).Single
    End Function
End Class

¿Qué debo hacer y por qué, o hay una mejor alternativa?

Respuestas a la pregunta(3)

Su respuesta a la pregunta