私は、多対多の関係を持つ2つのテーブル製品とカテゴリを持っています。ある製品(OriginalProduct)にリンクされているカテゴリを別の製品(newProduct)にコピーしようとしています。問題は、私がSaveChanges()
メソッドを実行すると、私はリンクテーブル内のレコードを取得するだけでなく、カテゴリテーブルにカテゴリの別のコピーを作成することです。私は多くの方法でこれを試してみたが、ここで私がしようとしてきた最後のカップルです:新しい関連レコードを作成せずに関連付け(リンクテーブルレコード)を追加しています。
' Copy Product/Categories
For Each oneProdCategory In OriginalProduct.Categories
Dim relatedCategory = _productContext.GetObjectByKey(New EntityKey ("ProductInfoEntities.Categories", "RecordId", oneProdCategory.RecordId))
Dim newCategory As New Category
With newCategory
.Description = relatedCategory.Description
.isActive = relatedCategory.IsActive
.RecordId = relatedCategory.RecordId
End With
newProduct.Categories.Add(newCategory)
Next
は作成されて、両方のリンクテーブルのレコードでこの試みの結果(良いです)もあることは、すべてのコピーを作成し、カテゴリとしても(あまり良くない)
' Copy Product/Categories
For Each oneProdCategory In OriginalProduct.Categories
Dim relatedCategory = _productContext.GetObjectByKey(New EntityKey ("ProductInfoEntities.Categories", "RecordId", oneProdCategory.RecordId))
newProduct.Categories.Add(relatedCategory)
Next
これは、次のエラーが発生:
"An entity object cannot be referenced by multiple instances of IEntityChangeTracker."
編集
For Each oneProdCategory In OriginalProduct.Categories
newProduct.Categories.Add(oneProdCategory)
Next
Private Sub tsBtnSave_Click(sender As System.Object, e As System.EventArgs) Handles tsBtnSave.Click
_productContext.SaveChanges()
If _formMode = DataFormAction.Insert Or _formMode = DataFormAction.Duplicate Then
Me.Close()
End If
End Sub
ありがとうございます!私は今まで以上に複雑にしようとしていましたか? – RickBen
これは私にとっては一歩先に進んでいます。私のコードが "SaveChanges"メソッドに到達すると、オブジェクトのキー値がObjectStateManager内の別のオブジェクトと競合するため、変更を受け入れることができないというエラーが表示されます。私は、これは新製品のアレルゲンが元の製品と同じであるためだと確信しています。これは簡単なことでなければならない、私はリンクレコードを作成する必要があります。 – RickBen
@RickBen 'newProduct' idに' OriginalProduct' Idを割り当てているかもしれません。 – Eranga