2

カテゴリのXML関数からインポートを作成しています。まず、XDocumentを使用して、追加するカテゴリのリストを作成します。XMLのIDを使用することを計画しているため、CategoriesテーブルのIDのisIdentityオプションをオフにしました。

XMLの例:

<cat>
<id>17</id>
<name>Category name</name>
<parent_id>0</parent_id>
</cat>

次に、IDでカテゴリを取得して更新するか、newを挿入するメソッドを作成しました。

var category = _categoryService.GetCategoryById(Id);
        if (category != null)
        {
            category.Name = model.Name;
            category.ParentCategoryId = model.ParentCategoryId;
            category.UpdatedOnUtc = DateTime.UtcNow;
            category.Published = true;
            category.Deleted = false;

            _categoryService.UpdateCategory(category);
        }
        else
        {
            category = new Core.Domain.Catalog.Category();

            category.Id = model.Id;
            category.ParentCategoryId = model.ParentCategoryId;
            category.Name = model.Name;
            category.UpdatedOnUtc = DateTime.UtcNow;
            category.CreatedOnUtc = DateTime.UtcNow;
            category.Published = true;
            category.Deleted = false;

            _categoryService.InsertCategory(category);
        }

そして、最も奇妙なことが起こります-アプリケーションは例外をスローします:値NULLを列'Id'、テーブル'nopCommerce.dbo.Category'に挿入できません。列はnullを許可しません。INSERTは失敗します。ステートメントは終了されました。しかし、デバッガーでも、カテゴリーIDはnullではありません。助けを求めてください!前もって感謝します!

更新:InsertCategoryは標準のnopCommerceメソッドです:

 /// <summary>
    /// Inserts category
    /// </summary>
    /// <param name="category">Category</param>
    public virtual void InsertCategory(Category category)
    {
        if (category == null)
            throw new ArgumentNullException("category");

        _categoryRepository.Insert(category);

        //cache
        _cacheManager.RemoveByPattern(CATEGORIES_PATTERN_KEY);
        _cacheManager.RemoveByPattern(PRODUCTCATEGORIES_PATTERN_KEY);

        //event notification
        _eventPublisher.EntityInserted(category);
    }
4

2 に答える 2

0

ここに表示されているコードは問題ないようです。InsertCategoryメソッドに問題があり、IDを使用していない可能性が高いと思います。これは単なる推測です...これが答えでない場合は、おそらくあなたはその下に何があるかを私たちに知らせることができます。

于 2012-09-16T23:49:09.470 に答える
0

IDから自動番号オプションを削除して、データベースだけでなくマッピングクラスも変更する必要があることがわかりました。それは別の苦痛でしたが、解決策は次のとおりです。

使用する代わりにthis.HasKey(c=>c.Id)

this.Property(c=>c.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None) ;
于 2012-09-17T19:04:21.837 に答える