我有一个拥有门的汽车实体。当汽车被删除时,门也应该被删除,因为它们本身没有意义。这是 FluentNHibernate 中的映射。
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 中的 Delete 方法如下所示:
public void Delete(Car car)
{
using (ISession session = NHibernateHelper.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
session.Delete(car);
transaction.Commit();
}
}
但是,以这种方式删除汽车时,不会删除车门,而是将 carId 设置为 de NULL。我认为 Cascade.AllDeleteOrphan() 会负责删除孩子(门)。我不得不重做 Delete 方法:
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();
}
}
}
我觉得我在这里缺少一些东西,因为在删除它之前必须获取一个对象是不对的。有什么想法吗?