我正在为类别创建从 XML 函数导入。首先,使用 XDocument,我创建了要添加的类别列表。我关闭了 Categories 表中 ID 的 isIdentity 选项,因为我打算使用 XML 中的 ID。
XML 示例:
<cat>
<id>17</id>
<name>Category name</name>
<parent_id>0</parent_id>
</cat>
然后,我编写了方法,该方法尝试通过 ID 获取类别并更新或插入新的:
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”;列不允许空值。插入失败。该语句已终止。但即使在调试器中,类别 ID 也不为空.. 寻求帮助!提前致谢!
更新: 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);
}