3

假设我有一个名为的对象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 会为我处理所有子记录?

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

public class CascadeSaveUpdateAttribute : Attribute {
}

public class CascadeSaveUpdateConvention :
    AttributeCollectionConvention<CascadeSaveUpdateAttribute>
{

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

我该怎么做才能让这个 Cascade Save 功能正常工作?

4

0 回答 0