NHibernate:Evicting但仍然有非唯一对象异常

时间:2013-10-09 12:38:58

标签: nhibernate

这种方法不是我最好的方法,但有一个循环引用问题正在进行,所以最后一分钟就把它打了一遍。出于某种原因,即使我正在驱逐详细对象上的原始引用顺序,我仍然与会话有另一个关联。我应该使用get吗?或者甚至更好的方法是用ID = x驱逐所有订单?

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 ;

    }

1 个答案:

答案 0 :(得分:2)

您可以访问会话对象,然后使用您喜欢的任何内容

session.GetSessionImplementation().PersistenceContext.EntityEntries

但如果我是你,我会确保我正在驱逐正确的物品并花一些时间进行调试。了解正在发生的事情比搜索变通办法更好

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