2011-07-31 16 views
0

私は、多対多の関係を持つ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 

答えて

0

あなたCategoriesプロパティがList OR

For Each oneProdCategory In OriginalProduct.Categories 

    newProduct.Categories.Add(oneProdCategory) 

Next 

すべてのエンティティが同じコンテキストで作成、取得されていることを確認している場合は、

newProduct.Categories.AddRange(OriginalProduct.Categories) 

を試すことができます。

+0

ありがとうございます!私は今まで以上に複雑にしようとしていましたか? – RickBen

+0

これは私にとっては一歩先に進んでいます。私のコードが "SaveChanges"メソッドに到達すると、オブジェクトのキー値がObjectStateManager内の別のオブジェクトと競合するため、変更を受け入れることができないというエラーが表示されます。私は、これは新製品のアレルゲンが元の製品と同じであるためだと確信しています。これは簡単なことでなければならない、私はリンクレコードを作成する必要があります。 – RickBen

+0

@RickBen 'newProduct' idに' OriginalProduct' Idを割り当てているかもしれません。 – Eranga

関連する問題