实体框架NullReferenceException

时间:2014-03-19 18:58:50

标签: vb.net nullreferenceexception

为什么此代码会生成null异常:

Public Function MessageCount(ByVal mId As Long) As Integer
    Dim messages As List(Of InboxMessage) = Nothing
    Using ctx As New UFCWEntities.UFCWEntities

        Dim allMessageIds = ctx.InboxLinks.Where(Function(o) o.MemberId = mId).ToList()
        For Each i As InboxLink In allMessageIds
            messages.Add(ctx.InboxMessages.FirstOrDefault(Function(o) o.InboxMessageId = i.InboxMessageId))
        Next

    End Using

    If Not IsNothing(messages) Then
        Return messages.Count()
    End If

    Return 0

End Function

尝试执行message.Add

时会生成异常

2 个答案:

答案 0 :(得分:1)

您收到此错误是因为ctx.InboxMessages.FirstOrDefault(...)返回null。

您应首先进行空检查,例如:

For Each i As InboxLink In allMessageIds
    Dim firstMsg = ctx.InboxMessages.FirstOrDefault(...)
    If Not IsNothing(firstMsg) Then
        messages.Add(firstMsg)
    End If
Next

答案 1 :(得分:0)

您没有实例化您的消息变量,因此当您尝试添加到它时,它不会因为消息仍然是Nothing。将第一行更改为

Dim messages As New List(Of InboxMessage)

话虽如此,您可能需要考虑将整个操作视为基于集合的操作。如果你想要做的就是过滤它们并计算过滤后的结果,你就不需要给物体加水。从您提供的代码中,您应该能够将其简化为:

Using ctx As New UFCWEntities.UFCWEntities
   return ctx.InboxLinks.Count(function(o) o.MemberId = mId)
End Using