添加关联(链接表记录)而不创建新的相关记录。

时间:2011-07-31 06:09:32

标签: vb.net entity-framework

我有两个表产品和类别,具有多对多的关系。我试图将链接到一个产品(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

这会导致以下错误:

  

“实体对象不能被多个实例引用   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

1 个答案:

答案 0 :(得分:0)

你可以尝试

newProduct.Categories.AddRange(OriginalProduct.Categories)

如果您的Categories属性为List OR

For Each oneProdCategory In OriginalProduct.Categories

  newProduct.Categories.Add(oneProdCategory)

Next

确保检索所有实体,使用相同的上下文创建。

相关问题