Добавление ассоциации (запись таблицы ссылок) без создания новой связанной записи. - PullRequest
0 голосов
/ 31 июля 2011

У меня есть две таблицы «Продукты» и «Категории» со связями «многие ко многим». Я пытаюсь скопировать категории, связанные с одним продуктом (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 голосов
/ 31 июля 2011

Вы можете попробовать

newProduct.Categories.AddRange(OriginalProduct.Categories)

Если ваше Categories свойство является List OR

For Each oneProdCategory In OriginalProduct.Categories

  newProduct.Categories.Add(oneProdCategory)

Next

Убедитесь, что все объекты извлечены и созданы в одном контексте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...