Хорошо известно, что вы не можете установить идентификаторы внешнего ключа непосредственно в Linq для SQL, если объекты уже были загружены. Однако вы можете искать сущность по ее внешнему ключу, а затем установить сущность как внешнюю сущность, используя отношение сущности. (Я вынул перечисление здесь и использовал целочисленные значения для простоты). Т.е. если у меня есть загруженный объект Appointment и связанный объект AppoinmentStatus, я не могу сделать это: -
ExistingAppointment.AppointmentStatusID = 7
Но я могу сделать это: -
ExistingAppointment.AppointmentStatus = (From appstat In db.AppointmentStatus _
Where appstat.StatusID = 7 _
Select appstat).Single
У меня такая штуковина засоряет мой код, и я бы хотел провести рефакторинг. Итак ...
Я, очевидно, мог бы использовать вспомогательный метод в модуле, подобном этому: -
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
Я мог бы даже превратить это в метод расширения, как этот.
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
Я мог бы также поместить это в частичный класс Linq to SQL, как это.
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
Далее я мог бы поместить код в частичный класс сущности Linq to SQL Appointment Entity, например: -
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
Что мне делать и почему, или есть лучшая альтернатива?