早上好,
我有很多实体,Car和Van,每个实体都有一个Driver列表。例如,
public class Car : Entity
{
public virtual string Name { get; set; }
public virtual IList<Driver> Drivers { get; set; }
}
如果将相同的驱动程序添加到Car和Van。当我从汽车中删除驱动程序并且驱动程序存在于范上时,我得到一个SQL引用异常。
在数据库中,我有一张汽车,货车和司机表,然后是两张加入表Cars_Drivers
和Vans_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
驱动器
同样适用于货车。
@Handprint - 用于从汽车中删除驱动程序的代码。
Driver driver = DriverService.Get(driverId);
Car car = CarService.Get(carId);
car.Drivers.Remove(driver);
CarService.SaveOrUpdate(car);
提前致谢。
富