문을 소유 한 Car 엔티티가 있습니다. 자동차가 삭제되면 문을 지워야합니다. 왜냐하면 자동차가 스스로 이해할 수 없기 때문입니다. FluentNibernate의 매핑은 다음과 같습니다. 이 방법으로 차를 삭제할 때FluentNHibernate가 AllDeleteOrphan이 있어도 하위 엔티티를 삭제하지 않음
public void Delete(Car car)
{
using (ISession session = NHibernateHelper.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
session.Delete(car);
transaction.Commit();
}
}
그러나, 문이 삭제되지 않고 carId는 NULL 드 넣어 :
public class CarMap : ClassMap<Car>
{
public CarMap()
{
Id(x => x.CarId).GeneratedBy.Assigned();
HasMany(x => x.Doors).Cascade.AllDeleteOrphan();
}
}
public class DoorMap : ClassMap<Door>
{
public DoorMap()
{
Id(x => x.DoorId);
References(x => x.Car);
}
}
CarDao 내부의 삭제 방법은 같습니다. 나는 Cascade.AllDeleteOrphan()이 아이들 (Doors) 삭제를 처리 할 것이라고 생각했습니다. 내가 여기에 누락 뭔가처럼 그것을 삭제하기 전에 개체를 얻을 수있는 권리를 생각하지 않기 때문에,
public void Delete(Car car)
{
using (ISession session = NHibernateHelper.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
var entity = session.Get<Car>(car.CarId);
if (entity != null)
{
session.Delete(entity);
transaction.Commit();
}
}
}
I 느낌 : 나는이에 대한 삭제 방법을 재 작업해야했다. 이견있는 사람?
수정. 마지막 단락은 http://nhforge.org/doc/nh/en/index.html#example-parentchild-cascades에서 확인하십시오. * 참고 : 컬렉션 매핑에서 inverse = "true"를 지정하더라도 컬렉 션 요소를 반복하여 계단식을 계속 처리합니다. 따라서 개체를 저장, 삭제 또는 캐스케이드로 업데이트해야하는 경우 개체를 컬렉션에 추가해야합니다. 단순히 부모를 설정하는 것만으로는 충분하지 않습니다. * –
@ pobed2 질문에 대한 답변이 있습니까? – CSL
예. 나는 NHibernate에 대한 몇 가지 개념을 오해 한 것으로 생각하고 올바른 방향으로 이끌었다. 감사! – pobed2