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

そして、それが私の 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 は既にセッションにあるため、ユーザーから 1 つの ID を保存しようとしますが、Merge() を使用して同じエラーが発生しました。また、セッションごとのリクエストも使用しています。そして、私はこのドキュメントで同じことをしようとしました。どうすれば修正できますか?

4

1 に答える 1

1

同じセッションを使用して複数の場所から同じエンティティを取得しています。 Mergeメソッドは、異なるセッションからエンティティをアタッチするために使用されます。

この Ayende の記事を読んでください。

于 2015-04-20T21:22:44.960 に答える