I have a DataContract as followed:
<DataContract()> _
Public Class PrivateProfile
' This member is serialized.
<DataMember()> _
Public UserAccount As UserAccount
<DataMember()> _
Public ProfileName As String = ""
<DataMember()> _
Public Birthday As Date?
<DataMember()> _
Public Gender As Int16 = 0
<DataMember()> _
Public AboutMe As String = ""
<DataMember()> _
Public Locations As New List(Of Location)
<DataMember()> _
Public Contacts As New List(Of Contact)
End Class
The Contact is:
<DataContract()> _
Public Class Contact
' This member is serialized.
<DataMember()> _
Public Value As String
<DataMember()> _
Public ContactTypes_ContactTypeId As Int16
<DataMember()> _
Public PrivatePs As New List(Of PrivateProfile)
End Class
On Client Side I use the following code:
Dim svcProfile As New svcProfiles.ProfilesClient
.....
Dim pprofile As New svcProfiles.PrivateProfile
.....
Dim co As New svcProfiles.Contact
co.Value = "34234234234"
co.ContactTypes_ContactTypeId = 1
pprofile.Contacts.Add(co)
As soon i get to Add the contact to the Profile (last line), i get a NullReferenceException. Contacts is allways nothing, but i dont know why.
Any Idea... googled a lot...
Edit: When i run in same situation on wcf implementation (server) side i get into same problem:
If pprofile.Contacts.Count > 0 Then
Dim co As New contracts.Contact
For Each co In pprofile.Contacts
Dim con As New ef.Contact()
con.ContactTypes_ContactTypeId = co.ContactTypes_ContactTypeId
con.Value = co.Value
con.PrivatePs.Add(pp)
context.Add(con)
Next
context.SaveChanges()
End If
I suspect that the proxy class that is generated from your services is excluding the New keyword and just sets up the property type. You should be able to fix this in the calling code by instantiating it explicitly:
Dim con As New ef.Contact()
con.ContactTypes_ContactTypeId = co.ContactTypes_ContactTypeId
con.Value = co.Value
con.PrivatePs = New PrivatePs()
con.PrivatePs.Add(pp)
context.Add(con)
If you are using the entity framework, you may want to check into the fixup code that they generate under the covers for navigation properties to make sure that they can synchronize correctly.