2013-10-09 30 views
2

這種方法不是我最好的,但有一個循環引用問題,所以最後一分鐘把它放在一起。出於某種原因,即使我正在清除細節對象上的原始引用順序,但我仍然與該會話有關聯。我應該使用get嗎?或者更好的是有沒有辦法說驅逐ID = x的所有訂單?NHibernate:退卻,但仍然有非唯一的對象異常

public DetailDTO SaveNewDetailToOrder(DetailDTO detailDTO) 
    { 
     var detailReturn = new DetailDTO(); 

     try 
     { 
      var order = LoadOrderById(detailDTO.OrderId); 
      var previousStatus = issue.CurrentDetailStatus; 

      if (previousStatus != null && detailDTO.Status.Id != previousStatus.Id) 
      { 
       var detail = Mapper.Map<DetailDTO, Detail>(detailDTO); 
       _orderRepository.EvictOrder(detail.DetailOrder); 
       order.Details.Add(detailDTO); 
       order.IsEscalated = false; 
       order.DormantDate = detailDTO.CreatedTime; 

       var orderReturn = SaveOrder(order); ///Error Here 
       if (orderReturn.IsActionSuccessful) 
       { 
        detailReturn = 
         orderReturn.Details.DTOObjects.OrderByDescending(x => x.CreatedTime).First(); 
        SendStatusChangeEmail(orderReturn); 
       } 

      } 
      else 
      { 

       detailReturn = _detailService.SaveDetail(detailDTO); 
      } 

     } 
     catch (Exception ex) 
     { 
      throw ServiceErrorMessage(ex, detailReturn); 
     } 

     return detailReturn ; 

    } 

回答

2

您可以訪問會話對象,並使用那麼無論你喜歡

session.GetSessionImplementation().PersistenceContext.EntityEntries 

,但如果我是你,我會確保我是驅逐對象的權利和花一些時間調試。知道是怎麼回事是不是尋找解決方法

foreach (var e in session.GetSessionImplementation().PersistenceContext.EntityEntries.Values.OfType<EntityType>().Where(<condition>)) 
{ 
    session.Evict(e); 
} 
+0

更好地「瞭解正在發生的事情是不是尋找更好的解決方法」絕對同意,我們以往開發週期就這個問題和測試。試圖讓它回到BAs,以便他們可以在研究時根據這個測試其他功能。 – Seth

相關問題