I get the nopProduct with ProductService and productTags with ProductTagService; it seems they are belonging to different object contexts, why?
if (nopProduct != null)
{
var existingProductTags = nopProduct.ProductTags.ToList();
if (!string.IsNullOrEmpty(product.TagsEn))
{
string[] productTags = product.TagsEn.Split(STRING_SEPARATOR);
var productTagsToDelete = new List<ProductTag>();
foreach (var existingProductTag in existingProductTags)
{
bool found = false;
foreach (string newProductTag in productTags)
{
if (existingProductTag.Name.Equals(newProductTag, StringComparison.InvariantCultureIgnoreCase))
{
found = true;
break;
}
}
if (!found)
{
productTagsToDelete.Add(existingProductTag);
}
}
foreach (var productTag in productTagsToDelete)
{
nopProduct.ProductTags.Remove(productTag);
//ensure product is saved before updating totals
productService.UpdateProduct(nopProduct);
productTagService.UpdateProductTagTotals(productTag);
}
foreach (string productTagName in productTags)
{
ProductTag productTag = null;
var productTag2 = productTagService.GetProductTagByName(productTagName);
if (productTag2 == null)
{
//add new product tag
productTag = new ProductTag()
{
Name = productTagName,
ProductCount = 0
};
productTagService.InsertProductTag(productTag);
}
else
{
productTag = productTag2;
}
if (!nopProduct.ProductTags.Any(x => x.Id.Equals(productTag.Id)))
{
nopProduct.ProductTags.Add(productTag); //AT THIS POINT I GET THE EXCEPTION
//ensure product is saved before updating totals
productService.UpdateProduct(nopProduct);
}
//update product tag totals
productTag2 = productTagService.GetProductTagByName(productTagName);
productTagService.UpdateProductTagTotals(productTag2);
}