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);
}
我建议您在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