В этом методе я бы написал код, идентичный установщику, за исключением того, что он НЕ включает эту часть:

о известно, что вы не можете установить идентификаторы внешнего ключа непосредственно в 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 следующим образом:


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

Что мне делать и почему, или есть лучшая альтернатива?