На объектный объект нельзя ссылаться несколькими экземплярами IEntityChangeTracker - PullRequest
0 голосов
/ 16 сентября 2011

У меня проблема с nopcommerce 1.9, и мне нужна помощь, пожалуйста.

Работа, которую я выполняю, заключается в добавлении импортера продукта в существующую функциональность.

При первом запуске после iisreset импортер работает нормально. Однако второй раз после и при любом последующем экземпляре выдает вышеуказанную ошибку. Это, кажется, постоянно происходит при запуске следующего кода IoC.Resolve (). UpdateProduct (product). Код, который это вызывает ниже:

    /// <summary>
    /// Updates the product
    /// </summary>
    /// <param name="product">Product</param>
    public void UpdateProduct(Product product)
    {
        if (product == null)
            throw new ArgumentNullException("product");

        product.Name = CommonHelper.EnsureNotNull(product.Name);
        product.Name = CommonHelper.EnsureMaximumLength(product.Name, 400);
        product.ShortDescription = CommonHelper.EnsureNotNull(product.ShortDescription);
        product.FullDescription = CommonHelper.EnsureNotNull(product.FullDescription);
        product.AdminComment = CommonHelper.EnsureNotNull(product.AdminComment);
        product.MetaKeywords = CommonHelper.EnsureNotNull(product.MetaKeywords);
        product.MetaKeywords = CommonHelper.EnsureMaximumLength(product.MetaKeywords, 400);
        product.MetaDescription = CommonHelper.EnsureNotNull(product.MetaDescription);
        product.MetaDescription = CommonHelper.EnsureMaximumLength(product.MetaDescription, 4000);
        product.MetaTitle = CommonHelper.EnsureNotNull(product.MetaTitle);
        product.MetaTitle = CommonHelper.EnsureMaximumLength(product.MetaTitle, 400);
        product.SEName = CommonHelper.EnsureNotNull(product.SEName);
        product.SEName = CommonHelper.EnsureMaximumLength(product.SEName, 100);

        if (!_context.IsAttached(product))
            _context.Products.Attach(product);

        _context.SaveChanges();

        if (this.CacheEnabled)
        {
            _cacheManager.RemoveByPattern(PRODUCTS_PATTERN_KEY);
            _cacheManager.RemoveByPattern(PRODUCTVARIANTS_PATTERN_KEY);
            _cacheManager.RemoveByPattern(TIERPRICES_PATTERN_KEY);
            _cacheManager.RemoveByPattern(CUSTOMERROLEPRICES_PATTERN_KEY);
        }

        //raise event             
        EventContext.Current.OnProductUpdated(null,
            new ProductEventArgs() { Product = product });
    }

У меня не очень большой опыт работы с технологиями такого типа (ObjectContexts), поэтому, если бы можно было предоставить полное решение, это было бы очень признательно. Я видел много примеров этой ошибки в Интернете, но не нашел решения, которое работает / имеет смысл для меня. Из того, что я читал, очевидно, что продукт подключается к двум разным объектным объектам. Я предполагаю, что это то, что происходит здесь, но я не знаю достаточно о технологии, чтобы выяснить, где и почему. Я попытался отсоединиться после SaveChanges, чтобы в следующий раз он не подключил тот же объект, но это не было решением, как я ожидал ...

Большое спасибо, Адриан.

1 Ответ

1 голос
/ 16 сентября 2011

Кэшируется ли продукт через постбэки?Обычно это происходит, когда объект статичен, но первоначально он запрашивался при начальной загрузке страницы, а затем обновлялся в обратной передаче, что-то вроде этого.Причина, по которой это происходит, заключается в том, что контекст объекта, к которому он был запрошен, отличался от INSTANCE, отличным от того, который у вас есть здесь.

Если вы сначала отсоедините сущность с помощью метода Detach, то вы 'Я смогу сделать это.В противном случае, пожалуйста, предоставьте больше информации о:

  • Статический контекст объекта хранится статически?
  • Кэшируется ли сущность?
  • Где определен _context и как вы его создаетеконтекст?

HTH.

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