在NHibernate中使用Merge()时出错:具有相同标识符的不同对象

时间:2015-04-20 16:29:22

标签: c# nhibernate fluent-nhibernate session-per-request

我正在使用FluentNHibernate,当我发帖时收到此错误。

  

已经有一个具有相同标识符值的不同对象   与会话相关联

那是我的控制器:

private readonly ITicketAppService _ticketAppService;
public TicketController()
    {
        ITicketAppService ticketAppService = new TicketAppService(new TicketService(new TicketRepository(), new RomaneioCodRepository(), new ParamGerarMZRepository()));

    }

public ResponseApi Post(Ticket ticket)
     {
        var result = new ResponseApi();
        try{
        //my code goes here
        //my code goes here
        //my code goes here


        _ticketAppService.Add(ticket);
       _ticketAppService.Commit();

       result.DocsSaved.AddRange(ticket.ROMANEIOs);

       }
       catch (Exception ex)
       {
         _ticketAppService.RollBack();
         result.Errors.Add(new Erro(ex));
       }
       return result;
     }

那就是我的Add on RepositoryBase:

public virtual void Add(TEntity obj)
        {
            try
            {
                BeginTrasaction();
                Db.Merge(obj);
            }
            catch (Exception ex)
            {
                Log.ErrorFormat("Erro ao tentar adicionar alterações. Detalhes: {0}", ex);
                throw new Exception("Erro ao tentar adicionar registro.", ex);
            }
        }

我所看到的所有问题都说使用Merge()会导致NHibernate尝试从用户那里保存一个ID,就像已经在会话中一样,但是我使用Merge()得到了同样的错误。 而且我也在使用每个请求的会话。 我试过在documentation上做同样的事情。 有人知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您使用相同的会话从多个地方获取相同的实体,Merge方法用于附加来自不同会话的实体。

阅读Ayende的article