2016-06-10 91 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

我试图集中这个,因为我需要在多个地方加载子实体。因此,错误地尝试创建。到目前为止,做这件事的方法都感觉不对,包括一个属性为列表(部分)的部分类,如果需要,它将被检查和填充。 –