4

したがって、orderという親オブジェクトと、nHibernateでCascadeがAll-Delete-orphanに設定されたorderLineItemsという子オブジェクトのコレクションがあります。これが私のコードです。

using( var session = _sessionManager.GetSession())
        using (var transaction = session.BeginTransaction())
        {

            var order = _repository.GetOrderEagerlyByOrderId(session, fromDb.Id);
            var now = DateTime.Now;
            const string user = "GNB\\Username";
            var future = now.AddYears(1);
            var taxType = new TaxType(0, "Code", "AlternateNameE", "AlternateNameF", "NameE", "NameF", "DescriptionE", "DescriptionF", 13, now, future, user, now, user, now);
            var _serviceCatRep = new ServiceCatalogueRepository();

            var serviceCatalogueItem = _serviceCatRep.GetServiceCatalogueItemByCode(session, "VR-PASS");
            var orderLineItem1 = new OrderLineItem(0, null, "DescriptionE", "DescriptionF", 1, 10, null, null, 5, false, serviceCatalogueItem, null, user, now, user, future);

            order.OrderLineItems.Clear();

            order.OrderLineItems = order.OrderLineItems == null ? new List<IOrderLineItem> { orderLineItem1 } : new List<IOrderLineItem>(order.OrderLineItems) { orderLineItem1 };

            _repository.SaveOrUpdate(session, order);
            transaction.Commit();
        }

transaction.Commit();次のエラーで失敗します。

NHibernate.HibernateException:cascade = "all-delete-orphan"のコレクションは、所有するエンティティインスタンスによって参照されなくなりました

また、例を使用して、allとall-delete-orphanの違いは何ですか。

4

2 に答える 2

4

あなたが持っている:

order.OrderLineItems.Clear();

order.OrderLineItems = order.OrderLineItems == null 
    ? new List<IOrderLineItem> { orderLineItem1 } 
    : new List<IOrderLineItem>(order.OrderLineItems) { orderLineItem1 };

まず、order.OrderLineItemsがnullの場合、order.OrderLineItems.Clear()はNullReferenceExceptionをスローします。次に、新しいリストをorder.OrderLineItemsに割り当てているため、NHibernateが削除をカスケードする対象がわからないために問題が発生します。 。動作させるには、2行目を次のように変更します。

order.OrderLineItems.Add(orderLineItem1);
于 2012-05-24T14:25:28.717 に答える
0

マッピングで-コレクションをinverse()としてマークします

HasMany(x=>x.OrderLineItems)
   .Inverse(); 
于 2012-05-24T14:18:26.787 に答える