0

大家早,

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

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

如果将相同的 Driver 添加到 Car 和 Van。当我从汽车上删除司机并且司机存在于货车上时,我得到一个 SQL 引用异常。

在数据库中,我有一个用于 Cars、Vans 和 Drivers 的表,然后是两个连接表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();
    }
}
  • 汽车

    • ID
    • 姓名
  • Cars_Drivers

    • ID
    • CarFK
    • 司机FK
  • 驱动程序

    • ID
    • 更多科尔

货车也是如此。

@Handprint - 用于从汽车中移除司机的代码。

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

car.Drivers.Remove(driver); 

CarService.SaveOrUpdate(car);

提前致谢。

富有的

4

0 回答 0