0

nopcommerce 1.9 で問題が発生しました。本当に助けが必要です。

私が行っている作業は、製品インポーターを既存の機能に追加することです。

iisreset 後の最初の実行では、インポーターは正常に動作します。ただし、2 回目以降のインスタンスでは、上記のエラーが発生します。これは、次のコード 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) についてあまり経験がないので、完全なソリューションを提供できれば非常にありがたいです。インターネット上でこのエラーの例をたくさん見てきましたが、機能する/意味のある解決策は見つかりませんでした。私が読んだことによると、明らかに起こっていることは、製品が 2 つの異なる ObjectContext に接続されているということです。これがここで起こっていることだと思いますが、どこで/なぜなのかを知るには、テクノロジーについて十分に知りません. 次回実行時に同じオブジェクトを再アタッチしないように、SaveChanges の後にデタッチしようとしましたが、期待どおりの解決策ではありませんでした...

どうもありがとう、エイドリアン。

4

1 に答える 1

1

製品はポストバック間でキャッシュされていますか?通常、これはオブジェクトが静的である場合に発生しますが、元々は最初のページの読み込み時にクエリされ、その後、ポストバックで更新されました。これが発生する理由は、クエリ元であることがわかっているオブジェクトコンテキストが、ここにあるインスタンスとは異なるインスタンスであったためです。

メソッドを使用して最初にエンティティをデタッチすると、Detachこれを実行できるようになります。それ以外の場合は、以下に関する詳細情報を提供してください。

  • オブジェクトコンテキストは静的に保存されていますか?
  • エンティティはキャッシュされていますか?
  • _contextはどこで定義され、コンテキストをどのようにインスタンス化しますか?

HTH。

于 2011-09-16T16:31:21.560 に答える