我有两个表产品和类别,具有多对多的关系。我试图将链接到一个产品(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
答案 0 :(得分:0)
你可以尝试
newProduct.Categories.AddRange(OriginalProduct.Categories)
如果您的Categories
属性为List
OR
For Each oneProdCategory In OriginalProduct.Categories
newProduct.Categories.Add(oneProdCategory)
Next
确保检索所有实体,使用相同的上下文创建。