0
我有一个物体可能已经通过旧的DataContext
进行了充气,或者可能刚刚通过.ID
属性集进行了新增。无法确切知道。我正在寻找从数据库中的任何东西重新水化整个对象。如果对象是新建的,我可以在表格对象上调用.Attach()
,并从数据上下文中轻松刷新。但是,如果该对象已经从DataContext夸大,我会收到错误:“无法附加已存在的实体。”没有时间戳字段或类似的东西 - 只是一个整数主键用于控制补液。我想知道是否有条件附加的方法。下面的代码 - 它的工作原理我希望它的方式,但是这似乎是一个hackish的方式去了解它:如何检查Linq-to-SQL对象是否已附加到DataContext?
' myDC is a shared instance of a vanilla DataContext...
' myObj is an instance of a linqed-up `SomeLinqObject`
Dim tbl = myDC.GetTable(Of SomeLinqObject)()
Try
tbl.Attach(myObj) ' <-- Wish I could just TryAttach() here!
Catch ex As Exception
If ex.Message = "Cannot attach an entity that already exists." Then
' Do nothing
Else
Throw
End If
End Try
myDC.Refresh(RefreshMode.OverwriteCurrentValues, myObj) ' Rehydrate
- 编辑 -
由于艾萨克的答案,这里是修改后的代码:
Dim tbl = myDC.GetTable(Of SomeLinqObject)()
Dim isAttached = (tbl.GetOriginalEntityState(myObj) IsNot Nothing)
If Not isAttached Then tbl.Attach(myObj)
myDC.Refresh(RefreshMode.OverwriteCurrentValues, myObj) ' Rehydrate
太不可思议了,谢谢!完美的作品。当成语相同时,C#答案没有问题。 – mattmc3