Self Tracking Entities (STE 5) を介してデータにアクセスする WPF 4 アプリケーションがあります。データ コンテキストが STEのモデル クラス ( vendor ) に設定された WPF コンテンツ コントロールがあります。vendor クラスには、vendor_accountsのナビゲーション プロパティがあります。これらのベンダー アカウントのコレクションを正常に取得し、コンテンツ コントロール内のリストビューにバインドできます。ただし、新しい vendor_account オブジェクトをコレクションに追加しようとすると、次のエラーが発生します
CollectionChanged イベント中に ObservableCollection を変更することはできません。
リストビューのコレクションに追加するために使用する単純化された vb.NET コードを次に示します。
Private Sub AddAccountExecute()
Dim newAcc As New vendor_account With {.chrAccName = "New Account Name", .chrAccNumber = "New #"}
VendorSelection.vendor_account.Add(newAcc)
''FTC_Context is the object context for the STE data access model
FTC_Context.SaveChanges()
End Sub
このエラーは、STE 用に生成されたテンプレート コードにある次のサブでスローされます。エラーは行previousValue.vendor_account.Remove(Me)に表示されます:
Private Sub Fixupvendor(ByVal previousValue As vendor)
If IsDeserializing Then
Return
End If
If previousValue IsNot Nothing AndAlso previousValue.vendor_account.Contains(Me) Then
previousValue.vendor_account.Remove(Me)
End If
If vendor IsNot Nothing Then
vendor.vendor_account.Add(Me)
idVendor = vendor.idVendor
End If
If ChangeTracker.ChangeTrackingEnabled Then
If ChangeTracker.OriginalValues.ContainsKey("vendor") AndAlso
ChangeTracker.OriginalValues("vendor") Is vendor Then
ChangeTracker.OriginalValues.Remove("vendor")
Else
ChangeTracker.RecordOriginalValue("vendor", previousValue)
End If
If vendor IsNot Nothing AndAlso Not vendor.ChangeTracker.ChangeTrackingEnabled Then
vendor.StartTracking()
End If
End If
End Sub
その行をコメントアウトすると、項目を account_vendor コレクションに正常に追加できます (これは、STE モデルを更新するたびに再作成される自動生成コードを変更するため、許容できる修正ではありません)。
そこで、データベースが更新されるかどうかをテストするために、上記のコード行をコメントアウトして FTC_Contect.SaveChanges() に追加し直しました。しかし、変更の保存行で次のエラーが表示されます。
多重度の制約に違反しています。関係 'FTC_devModel.FK_vendor_account_vendor' のロール 'vendor' の多重度は 1 または 0..1 です。
私は STE を初めて使用し、問題を抱えています。
それで、私の質問は、「ナビゲーションプロパティ」を使用してレコードを追加/削除する方法の例を提供するか、上記のコードを修正するのを手伝ってくれる人がいるということです。
前もって感謝します