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?