“DELETE语句冲突”与同一事务上的NH多次删除

时间:2013-06-27 14:46:09

标签: c# wcf nhibernate fluent-nhibernate

我有以下实体+映射:

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,这就是它偶尔有效的原因。 ..

谢谢:)

0 个答案:

没有答案