在Orchard CMS中级联保存子对象

时间:2013-09-01 20:02:53

标签: orchardcms

假设我有一个名为Company的对象,其表示如下:

public class Company
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Address Address { get; set; }
}

public class Address
{
    public virtual int Id { get; set; }
    public virtual string Line1 { get; set; }
    public virtual string Line2 { get; set; }
    public virtual string Line3 { get; set; }
    public virtual string Town { get; set; }
    public virtual string County { get; set; }
    public virtual string Postcode { get; set; }
    public virtual double Longitude { get; set; }
    public virtual double Latitude { get; set; }
}

当我创建一家新公司时,我也希望创建新地址。目前,我只能通过创建地址记录然后单独创建公司记录来实现此目的:

    [HttpPost]
    public ActionResult Add(Company company)
    {
        _addressRepo.Create(company.Address);
        _companyRepo.Create(company);
        return RedirectToAction("Index");
    }

(其中_addressRepo和_companyRepo的类型分别为IRepository<Address>IRepository<Company>

如何让所有子对象级联保存?理想情况下,当我调用_companyRepo.Create(company);时,Orchard会为我处理所有子记录吗?

我尝试创建一个新属性,以便可以将属性标记为Cascade Save Update,但是如果我在Apply方法上放置一个断点,它似乎永远不会被命中。

public class CascadeSaveUpdateAttribute : Attribute {
}

public class CascadeSaveUpdateConvention :
    AttributeCollectionConvention<CascadeSaveUpdateAttribute>
{

    protected override void Apply(CascadeSaveUpdateAttribute attribute, ICollectionInstance instance)
    {
        instance.Cascade.SaveUpdate();
    }
}

如何使此级联保存功能正常工作?

0 个答案:

没有答案