Orchardcms 如何将记录添加到contentPart?
假设我有一个这样的模型:Orchardcms 如何将记录添加到contentPart?,orchardcms,Orchardcms,假设我有一个这样的模型: public class LicenceProductRecord : ContentPartRecord { public LicenceProductRecord() { Details = new List<LicenceProductDetailRecord>(); } public virtual string Sku { get; set; } public virtual IList&
public class LicenceProductRecord : ContentPartRecord
{
public LicenceProductRecord()
{
Details = new List<LicenceProductDetailRecord>();
}
public virtual string Sku { get; set; }
public virtual IList<LicenceProductDetailRecord> Details { get; set; }
}
public class LicenceProductDetailRecord
{
public virtual int Id { get; set; }
//fk on licenceProductRecord...
public virtual int LicenceProductRecord_Id { get; set; }
//id from external source
public virtual string LicenceId { get; set; }
//options
public virtual string Features { get; set; }
}
public class LicenceProductPart : ContentPart<LicenceProductRecord>
{
[Required]
public string Sku
{
get { return Record.Sku; }
set { Record.Sku = value; }
}
public IList<LicenceProductDetailRecord> Products
{
get { return Record.Details; }
set { Record.Details = value; }
}
}
LicenceProductPart的处理程序和驱动程序是每个ContentPart的标准配置。
然后,我添加了一个LicenceProductController来管理添加/删除LicenceProductPart的详细信息。
如何在此控制器中添加或删除LicenceProductDetail记录?我做了类似的事情,但没有提交给db:
[HttpPost]
public ActionResult AddNewProduct(string licProdId, int licPartId)
{
var part = _services.ContentManager.GetLatest<LicenceProductPart>(licPartId);
var pInfo = _catalogProvider.GetProductInfo(licProdId);//this is info from external catalog
var newProdDetailRec = new LicenceProductDetailRecord();
newProdDetailRec.LicenceProductRecord_Id = part.Id;
newProdDetailRec.ProductId = pInfo.Id;
StringBuilder sb = new StringBuilder();
foreach (var item in pInfo.Features)
{
sb.AppendFormat("{0}={1};",item.FeatureId,item.FeatureValue);
}
newProdDetailRec.Features = sb.ToString();
//_productDetailRepository.Create(newProdDetailRec);
//_productDetailRepository.Flush();
part.Products.Add(newProdDetailRec);
_services.ContentManager.Publish(part.ContentItem);
var shape = _services.New.EditorTemplate(
TemplateName: "Parts/LicenceProduct",
Model: LicenceProductViewModel.Map( part, _catalogProvider));
return new ShapeResult(this, shape);
}
我应该如何使用MembersList of ContentPart,就像此模型中的一个一样?一个选项可能是为LicenceProductDetailRecord创建ContentPart,并将其作为列表包含在LicenceProductPart中。这将为列表中的每个零件创建详细记录。对于未提交到数据库的部分,我对我的项使用以下方法 我创建了一个内容项,其中包含行或列中的零件 在迁移过程中,将其称为productItem 我使用orchard内容管理器创建项目和 它包含的部分 orchardServices.ContentManager.CreateproductItem, 版本选项。已出版 像这样使用我感兴趣的部分 var productPart=productItem.As; 当您更改productPart中的值时,它们将保留到数据库中
希望这会有帮助。这是一种方式,但我不希望LicenceProductDetail成为内容的一部分。谢谢你的努力。嗯,在我再次设置果园之后,它现在可以工作了。我看过一篇关于mappings.bin可能被缓存或类似的内容的帖子。这段代码现在实际上更新了数据库:取消对_productDetailRepository.Create的注释,并对prt.Products.Add和_services.ContentManager.Publish进行注释。对不起,浪费了你的时间。