假设我有一个名为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();
}
}
如何使此级联保存功能正常工作?