无法删除具有多个引用的实体

时间:2012-11-08 10:53:31

标签: fluent-nhibernate fluent-nhibernate-mapping

早上好,

我有很多实体,Car和Van,每个实体都有一个Driver列表。例如,

public class Car : Entity
{
    public virtual string Name { get; set; }
    public virtual IList<Driver> Drivers { get; set; }
}

如果将相同的驱动程序添加到Car和Van。当我从汽车中删除驱动程序并且驱动程序存在于范上时,我得到一个SQL引用异常。

在数据库中,我有一张汽车,货车和司机表,然后是两张加入表Cars_DriversVans_Drivers

我可以在映射中做些什么来让其他对象相互识别,因此delete不会引发引用异常。

编辑 - 这是我尝试从汽车中删除驱动程序时遇到的SQL异常。

NHibernate.Exceptions.GenericADOException: could not delete: [Platform.Core.Driver#2]      [SQL: DELETE FROM Drivers WHERE Id = ?] ---> System.Data.SqlClient.SqlException: The DELETE statement conflicted with the REFERENCE constraint "FKCBD4DA8384042473". The conflict occurred in database "Platform", table "dbo.Vans_Drivers", column 'DriverFK'. The statement has been terminated.

编辑2 - 映射和表格

public class CarMappingOverrides : IAutoMappingOverride<Car>
{
    public void Override(AutoMapping<Car> mapping)
    {
        mapping.HasManyToMany(x => x.Drivers).Cascade.All();
    }
}

public class VanMappingOverrides : IAutoMappingOverride<Van>
{
    public void Override(AutoMapping<Van> mapping)
    {
        mapping.HasManyToMany(x => x.Drivers).Cascade.All();
    }
}
  • 汽车

    • 编号
    • 名称
  • Cars_Drivers

    • 编号
    • CarFK
    • DriverFK
  • 驱动器

    • 编号
    • 更多Cols

同样适用于货车。

@Handprint - 用于从汽车中删除驱动程序的代码。

Driver driver = DriverService.Get(driverId); 
Car car = CarService.Get(carId); 

car.Drivers.Remove(driver); 

CarService.SaveOrUpdate(car);

提前致谢。

0 个答案:

没有答案