uCommerce设置类别定义值和描述

本文关键字:描述 定义 设置 uCommerce | 更新日期: 2023-09-27 17:50:03

使用uCommerce v6.6, Umbraco v7

我在设置类别的显示名称和我创建的自定义定义时遇到问题。

我收到这个错误:

not-null属性引用空值或瞬态值UCommerce.EntitiesV2.Category.ProductCatalog

我想这是b/c在CategoryDescription类中有一个属性

public virtual int CategoryDescriptionId { get; protected set; }

但是我不知道如何设置这个b/c通常当你创建这样的对象,一旦你保存一个ID是为你创建的(想想EF)。

我还需要为类别"productNumber"设置自定义定义。

var parentCategory = catalog.Categories.First(x => x.Name.Equals(parentName));
var newCategory = new Category
{
      Name = product.Name,
      Definition = productDef,
      DisplayOnSite = true,
      ParentCategory = parentCategory,
      ProductCatalog = catalog
};
catalog.Categories.Add(newCategory);
catalog.Save();

var catDescription = new CategoryDescription()
{
      DisplayName = product.GetValue<string>("productName"),
      Category = newCategory,
};
catDescription.Save();  // ****errors out here*****
var catProperty = new CategoryProperty()
{
     Category = newCategory,
     DefinitionField = DefinitionField.FirstOrDefault(x => x.Name.Equals("productNumber")),
     Value = product.GetValue<string>("productNumber"),
};
catProperty.Save();

我所有的变量都有数据,这意味着它们不是空的。它在保存中是空的。每次都成功创建newCategory。

分类描述的类定义

public class CategoryDescription : IEntity
{
    public CategoryDescription();
    public static bool operator !=(CategoryDescription x, CategoryDescription y);
    public static bool operator ==(CategoryDescription x, CategoryDescription y);
    public virtual Category Category { get; set; }
    public virtual int CategoryDescriptionId { get; protected set; }
    public virtual int? ContentId { get; set; }
    public virtual string CultureCode { get; set; }
    public virtual string Description { get; set; }
    public virtual string DisplayName { get; set; }
    public virtual int Id { get; }
    public virtual bool RenderAsContent { get; set; }
    public static IQueryable<CategoryDescription> All();
    public virtual void Delete();
    public static void Delete(Expression<Func<CategoryDescription, bool>> expression);
    public override bool Equals(object obj);
    public static bool Exists(Expression<Func<CategoryDescription, bool>> expression);
    public static IList<CategoryDescription> Find(Expression<Func<CategoryDescription, bool>> expression);
    public static CategoryDescription FirstOrDefault(Expression<Func<CategoryDescription, bool>> expression);
    public static CategoryDescription Get(object id);
    public override int GetHashCode();
    public virtual void Save();
    public static CategoryDescription SingleOrDefault(Expression<Func<CategoryDescription, bool>> expression);
}

uCommerce设置类别定义值和描述

我建议您在newCategory实例上使用AddCategoryDescription方法,而不是尝试手动将CategoryDescription与引用联系起来。uCommerce是建立在NHibernate上的,有时很难找出是哪个属性导致了麻烦(只要你不使用无状态会话;然后你必须处理它)。

我记得uCommerce被设置为级联所有保存,所以如果你最后在你的目录上调用Save(),你应该很好去。

EDIT(回答如何填充属性):您可以使用以下

填充(新!)属性值
var definitionField = DefinitionField.FirstOrDefault(x => !x.Deleted && x.Definition.Name == "MyDefinition");
var category = new Category();
category.AddProperty(new CategoryProperty
{
    Category = category,
    DefinitionField = definitionField,
    CultureCode = "en-GB",
    Value = "My value"
});

我还没有测试过,但我确信它会工作。如果要覆盖现有的属性值,应该在Category中找到CategoryProperty。集合,然后替换Value属性。如果您创建相同的属性两次,因为它可能导致后端YSOD(除非他们已经修复了意想不到的特性:))

敬祝Martin