【发布时间】:2009-01-26 13:29:53
【问题描述】:
众所周知,如果实体已经加载,则不能直接在 Linq to SQL 中设置外键 ID。但是,您可以通过实体的外键查找实体,然后使用实体关系将该实体设置为外部实体。 (为了简单起见,我在这里取出了枚举并使用了整数值)。即,如果我有一个加载的约会实体和一个关联的 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
我应该怎么做,为什么,或者有更好的选择吗?
【问题讨论】:
-
“众所周知,您不能直接在 Linq to SQL 中设置外键 ID” - 这对我来说是个新闻。
-
还有我——我一直都这样做。
-
如果实体已经加载怎么办??
标签: .net vb.net linq-to-sql