0

我有一个班级是两个父母的孩子。当我删除其中一个父母时,我希望孩子被删除,但另一位父母将他们留在会话中并出现错误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);

有没有更好的方法来进行移除而不是遍历汽车列表,检查汽车是否属于我要移除的员工 - 并在移除员工之前也移除汽车?

4

1 回答 1

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);
于 2012-06-06T08:59:42.417 回答