0

私は2人の親の子供であるクラスを持っています。親の 1 つを削除すると、子が削除されることを期待していますが、もう 1 つの親はそれらをセッションに保持し、エラーが発生します。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 に答える