2016-06-10 90 views
0

我正在使用Linq to Sql並在基礎表中設置正確的外鍵關係。Linq to Sql導航對象實例屬性爲空或默認

但是,當我嘗試使用導航屬性時,我有一個微妙的錯誤。

在下面的代碼示例中,當我將手錶放在PartDetails上時,我確實得到了完全填充的部分。但是,如果我調用每個部分的屬性來檢查其值,則該實例現在爲空。

在過去的幾個小時裏,我一直在尋找一個答案,但到目前爲止乾燥。

任何人都可以告訴我爲什麼會發生這種情況嗎?

我在.NET 4.6.1時,Visual Studio 2015年和SQL Server 2014

我承認我無法找到正確的地方,關火DataLoadOptions但這似乎正常工作!

Partial Public Class LabourDetail 
    Private Sub OnCreated() 
     Dim db As New DataContext 
     Dim ds As DataLoadOptions = New DataLoadOptions() 
     ds.LoadWith(Function(c As LabourDetail) c.PartDetails) 
     db.LoadOptions = ds 
    End Sub 
    Public ReadOnly Property AnyPartsUnConsumed As Boolean 
     Get 
     'If I put a watch on the partdetails I do get a proper collection with proper instances. 
      Return PartDetails.Where(Function(p) p.PartsUnConsumed).Any 
     End Get 
    End Property 
End Class 

Partial Public Class PartDetail 
'When we reach this point, the values in the instance are all Null/Default 
    Public Property PartsUnConsumed() As Boolean = _CheckPartsUnConsumed() 
End Class 

我很感激任何幫助!

+0

這個'OnCreated'方法的預期目的是什麼?不管它是什麼,目前它什麼都不做。你創建一個'db'實例,當方法結束時被垃圾回收。 –

+0

@gert阿諾德 - 啊謝謝你 - DOH!那麼這將是一個雙面facepalm嗎?你會把這個作爲答案,因爲你指出什麼應該是顯而易見的是答案,需要一個upvote。 –

回答

1

Private Sub OnCreated()有效地不做任何事情。它創建了一個立即超出範圍的上下文。

我假設有一些上下文從數據庫中實現了LabourDetail這就是的上下文來設置LoadOptions的。

+0

謝謝你。我打破了我的規則,試圖在週五的下午弄清楚事情:) –

+0

我試圖集中這個,因爲我需要在多個地方加載子實體。因此,錯誤地嘗試創建。到目前爲止,做這件事的方法都感覺不對,包括一個屬性爲列表(部分)的部分類,如果需要,它將被檢查和填充。 –