(0xc0000005) 'Access violation': LINQ to SQL WPF VB.NET

(0xc0000005) 'Access violation': LINQ to SQL WPF VB.NET

应用程序编译没有错误。应用程序运行但结束时没有调试错误。单步执行它,它在输出显示的这一行切回到设计师:

"The program '[24680] AppName.vshost.exe' has exited with code -1073741819 (0xc0000005) 'Access violation'."

此行崩溃:

Dim c_InstanceDetail As t_Instance_Detail = (From InstDet In db.t_Instance_Details Where InstDet.ID = guInstance_ID Select InstDet).Single

在此子中:

Private Sub Refresh_PCA_InstanceDetail()
    Dim c_InstanceDetail As t_Instance_Detail = (From InstDet In db.t_Instance_Details Where InstDet.ID = guInstance_ID Select InstDet).Single

    Me.DataContext = c_InstanceDetail
    Me.InstanceDetailTypeView = CType(CollectionViewSource.GetDefaultView(Me.DataContext), BindingListCollectionView)
End Sub

编辑:Class 变量:

Private db As New AppDatabase_DBDataContext 'AppDatabase_DB being the name of the dbml file - AppDatabase_DB.dbml
Private InstanceDetailTypeView As BindingListCollectionView
Property guInstance_ID As Guid

t_Instance_Detail 由 LINQ 创建到 SQL 类 我已经尝试删除它并重新添加它 - 没有变化

这有效(并且只有 returns 1 条记录):

Dim c_InstanceDetail = (From InstDet In db.t_Instance_Details Where InstDet.ID = guInstance_ID Select InstDet)

我是 LINQ to SQL 和 WPF 的新手,所以我假设我做错了什么或者使用 LINQ to SQL Classes 的原因他们是无意的。如果有人可以让我知道我在这里做错了什么,以及我应该怎么做,那将非常感谢。

我认为问题可能是不返回记录(即使此时它返回了 1 条记录)。下面修复了它:

Private Sub Refresh_PCA_Instance()
    Dim c_Instance As IEnumerable(Of t_Instance)
    c_Instance = (From Inst In db.t_Instances Where Inst.ID = guInstance_ID Select Inst)

    If c_Instance.Count = 1 Then
        Me.DataContext = c_Instance
        Me.InstanceDetailTypeView = CType(CollectionViewSource.GetDefaultView(Me.DataContext), BindingListCollectionView)
    ElseIf c_Instance.Count > 1 Then
        Me.DataContext = c_Instance.First
        Me.InstanceDetailTypeView = CType(CollectionViewSource.GetDefaultView(Me.DataContext), BindingListCollectionView)
    End If
End Sub

编辑:我做的越多,我发现 better/other 方法:

Private Sub Refresh_PCA_Instance()
    Dim c_Instance As IEnumerable(Of t_Instance)
    c_Instance = (From Inst In db.t_Instances Where Inst.ID = guInstance_ID Select Inst).First

    Me.DataContext = c_Instance
    Me.InstanceDetailTypeView = CType(CollectionViewSource.GetDefaultView(Me.DataContext), BindingListCollectionView)
End Sub

Private Sub Refresh_PCA_Instance()
    Dim c_Instance As IEnumerable(Of t_Instance)
    c_Instance = (From Inst In db.t_Instances Where Inst.ID = guInstance_ID Select Inst)

    Me.DataContext = c_Instance.First
    Me.InstanceDetailTypeView = CType(CollectionViewSource.GetDefaultView(Me.DataContext), BindingListCollectionView)
End Sub