1

我正在使用 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;
     }

这就是我在 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() 时遇到了同样的错误。而且我也在使用每个请求的会话。我已经尝试在这个文档上做同样的事情。有人知道我该如何解决?

4

1 回答 1

1

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

阅读这篇 Ayende 的文章

于 2015-04-20T21:22:44.960 回答