0

このマッピングに基づく:異なるテーブルから選択するための nhibernate 基準

最後の Model.Order を削除したい場合、次のエラー メッセージが表示されます。

"deleted object would be re-saved by cascade (remove deleted object from associations"

ここに私のコード:

Model.Unit unitToDelete = m_MainGUI.Manager.RetrieveEquals<Model.Unit>("ID", unitID)[0];
Model.Order currentOrder = m_MainGUI.Manager.RetrieveEquals<Model.Order>("ID", unitToDelete.OrderRef.ID)[0];

if (currentOrder.Units.Count == 1) // last unit of order
{                    
    // delete references
    unitToDelete.OrderRef = null;
    unitToDelete.EmployeeRef = null;



    currentOrder.Units.Remove(unitToDelete); // remove unit from collection                                                       
    m_MainGUI.Manager.Delete<Model.Unit>(unitToDelete);


    m_MainGUI.Manager.Delete<Model.Order>(currentOrder); <---- ERROR
}
else
{
    currentOrder.Units.Remove(unitToDelete); // remove unit from collection
    m_MainGUI.Manager.Save<Model.Order>(currentOrder); // update order with removed unit
}

私の削除方法

public void Delete<T>(T item)
{
    using (m_HibernateSession.BeginTransaction())
    {
        m_HibernateSession.Delete(item);
        m_HibernateSession.Transaction.Commit();
        m_HibernateSession.Flush();
    }
}

Unit.cs (その一部)

public virtual Employee EmployeeRef { get; set; }
    public virtual Order OrderRef { get; set; }

    public virtual string Employee
    {
        get
        {
            if (EmployeeRef != null) return EmployeeRef.Name;
            else return "";
        }
    }

    public virtual int PONumber
    {
        get
        {
            return OrderRef.PONumber;
        }
    }

    public virtual int OrderID
    {
        get
        {
            return OrderRef.ID;
        }
    }      

Order.cs (一部)

private IList<Unit> m_UnitsList = new List<Unit>(); 

public virtual IList<Unit> Units
    {
        get { return m_UnitsList; }
        set { m_UnitsList = value; }
    }

    public virtual string Distributor
    {
        get
        {
            if (Units.Count != 0) return Units[0].Distributor;
            return "";
        }
    }

    public virtual string Department
    {
        get
        {
            if (Units.Count != 0) return Units[0].Department;
            return "";
        }
    }  

何かヒントはありますか?

どうも

4

1 に答える 1