两个系列中流利的nhibernate共同孩子

时间:2012-06-06 08:48:44

标签: nhibernate fluent-nhibernate

我有一个班级,是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);

是否有更好的方法进行拆卸,而不是遍历汽车列表,检查汽车是否属于我正在拆卸的员工 - 并且在拆除员工之前将汽车拆除?

1 个答案:

答案 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);