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进行注释。对不起,浪费了你的时间。