我有以下实体+映射:
public class DriverMatch : EntityWithID<Guid>
{
//Some Properties
}
class DriverMatchMap : ClassMap<DriverMatch>
{
public DriverMatchMap()
{
Id(x => x.ID).GeneratedBy.Guid();
//Some Properties
}
}
public class Business : EntityWithID<int>
{
...
public virtual IList<DriverMatch> DriversMatch { get; set; }
...
}
class BusinessMap : ClassMap<Business>
{
public BusinessMap()
{
...
HasMany(x => x.DriversMatch)
.KeyColumn("BusinessID")
.Table("DriverMatch")
.Cascade.AllDeleteOrphan();
...
}
}
public class TransportMatch : EntityWithID<int>
{
public virtual DriverMatch Driver { get; set; }
....
}
class TransportMatchMap : ClassMap<TransportMatch>
{
public TransportMatchMap()
{
Id(x => x.ID).GeneratedBy.Identity();
References(x => x.Driver);
....
}
}
它是:Business-&gt; DriverMatch列表 和一个独立的TransportMatch列表(带有DriverMatch Reference - 来自Business列表的相同driverMatch)
我的问题是删除TransportMatch并从同一会话中的业务列表中删除DriverMatch - 我得到“DELETE语句与REFERENCE约束冲突”
我首先删除TransportMatch,Flush,然后从Business List中删除DriverMatch,并SaveOrUpdate业务对象。
在存在TransportMatch时删除DriverMatch的“与REFERENCE约束冲突的DELETE语句”上的Transaction.Commit失败(当我在同一事务中删除了那个时)
这个问题不是确定性的,在相同的情况下,它有时会失败,有时它没有明显的原因
我的猜测是,Transaction.Commit正在“重新设置”删除并尝试首先删除DriverMatch而不是TransportMatch - 并且重新设置有时会先删除TransportMatch,这就是它偶尔有效的原因。 ..
谢谢:)