1

次のような DataContract があります。

<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

連絡先は次のとおりです。

<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

クライアント側では、次のコードを使用します。

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)

連絡先をプロファイルに追加するとすぐに (最後の行)、NullReferenceException が発生します。連絡先は常に何もありませんが、その理由はわかりません。

どんなアイデアでも...たくさんグーグルで検索しました...

編集: wcf 実装 (サーバー) 側で同じ状況で実行すると、同じ問題が発生します:

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 
4

1 に答える 1

0

あなたのサービスから生成されたプロキシ クラスが New キーワードを除外していて、プロパティ タイプを設定していると思われます。明示的にインスタンス化することで、呼び出し元のコードでこれを修正できるはずです。

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) 

エンティティ フレームワークを使用している場合は、ナビゲーション プロパティの内部で生成される修正コードをチェックして、正しく同期できることを確認することをお勧めします。

于 2012-09-13T17:27:17.880 に答える