カテゴリの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);
}