2015-04-20 29 views
1

Я использую FluentNHibernate, и когда я делаю сообщение, эта ошибка возникает.Ошибка при использовании Merge() в NHibernate: другой объект с тем же идентификатором

другой объект с тем же значением идентификатора уже , связанный с сеансом

Это мой контроллер:

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); 
      } 
     } 

Все вопросы, как я вижу sayed для использования Merge(), потому что NHibernate пытается сохранить один идентификатор от пользователя, как это уже было в сеансе, но я получил ту же ошибку, используя Merge(). И я также использую сеанс за запрос. И я попробовал сделать то же самое на этом documentation. Кто-то знает, как я могу это исправить?

ответ

1

Вы получаете один и тот же объект из нескольких мест с использованием одного и того же сеанса, метод Merge используется для присоединения объекта с разных сеансов.

Читайте об этом article Ayende.

+0

Куда я из разных мест? Потому что я получаю прямо от моего paramether в должности. Я думаю, что я понял эту статью, но я также попытался сделать save, saveorupdate, и я спросил с Merge(), почему каждый из них сказал, что использует Merge, и это решит. –

+1

Это может быть проблема, проверьте, загружается ли ваше приложение более одного раза с той же скоростью, что и отслеживание запросов, генерируемых nhibernate? – Najera