Definindo chaves estrangeiras no Linq para SQL
É sabido que você não pode definir IDs de chave estrangeira diretamente no Linq como SQL se as entidades já tiverem sido carregadas. No entanto, você pode procurar a entidade por sua chave estrangeira e depois defini-la como entidade estrangeira usando o relacionamento da entidade. (Retirei o enum aqui e usei valores inteiros por simplicidade). ou seja, se eu tenho uma entidade Nomeação carregada e uma Entidade AppoinmentStatus associada, não posso fazer isso: -
ExistingAppointment.AppointmentStatusID = 7
Mas eu posso fazer isso: -
ExistingAppointment.AppointmentStatus = (From appstat In db.AppointmentStatus _
Where appstat.StatusID = 7 _
Select appstat).Single
Eu tenho esse tipo de coisa espalhando meu código e gostaria de refatorar. Assim...
Obviamente, eu poderia usar um método auxiliar em um 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
Eu poderia até transformar isso em um método de extensão, assim.
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
Eu também poderia colocar isso na classe parcial Linq to SQL, assim.
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
Além disso, eu poderia colocar o código na classe parcial Linq to SQL Appointment Entity da seguinte maneira: -
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
O que devo fazer e por quê, ou existe uma alternativa melhor?