我有一个班级,是2个父母的孩子。
当我删除其中一个父母时,我希望删除这些孩子,但是另一个父母将他们留在会话中并出现错误Deleted object would be resaved by cascade
class Company
{
// automap.HasMany(x=>x.Cars).Cascade.AllDeleteOrphan();
IList<Car> Cars { get; set; }
// automap.HasMany(x=>x.Employees).Cascade.AllDeleteOrphan();
IList<Employee> Employees { get; set; }
}
class Employee
{
// automap.references(x=>x.job);
Company job { get; set; }
// automap.hasMany(x=>x.OwnedCars).Cascade.AllDeleteOrphan();
IList<Cars> OwnedCars { get; set; }
}
class Car
{
// automap.references(x=>x.company)
Company company { get; set; }
// automap.references(x => x.Employee)
Employee Driver {get; set; } // might be null
}
当我搬走一名员工时 - 我也希望将他的车从公司搬走;
var Company = Sesion..Get(1);
Company.Employees.removeAt(1);
Session.Update(Company);
是否有更好的方法进行拆卸,而不是遍历汽车列表,检查汽车是否属于我正在拆卸的员工 - 并且在拆除员工之前将汽车拆除?
答案 0 :(得分:1)
您必须从员工(可能没有必要,因为员工将被删除)和公司中删除与汽车的关联。所以你的删除看起来像这样:
var company = session.Get(1);
var employee = company.Employees[1];
foreach(var car in employee.OwnedCars)
{
car.company.Cars.Remove(car);
}
company.Employees.Remove(employee);
session.Update(company);