Сессия NHibernate, сохранить или обновить, сохранить - PullRequest
0 голосов
/ 14 октября 2011

У меня проблема с сохранением объектов с помощью NHibernate.Переменная отчета ниже не содержит изменений, но NHibernate выдает исключение ниже:

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

 pulic void SaveReport(Report report)
    {
         using (ISession session = NH.OpenSession())
        using (ITransaction transaction = session.BeginTransaction())
        {

            var childReport = session.QueryOver<Report>()
           .Where(x => x.ReportParent.Id == report.Id)
           .Fetch(x => x.Children).Eager
  .List().Distinct().ToList(); -- [1] refers to the line starting with .List()

           --[2]  report.Children = report.Children;

              session.SaveOrUpdate(report);
              transaction.Commit();

                    }
      }


          class Report
          {
            public virtual int Id { get; set; }
            public virtual IList<Report> Children { get; set; }
           public virtual Report ReportParent { get; set; }
          }

Если строка [1] закомментирована, исключений нет, но мне нужно внести изменения в переменную отчета перед ее сохранением.Например, используйте строку ниже в строке [2]:

          report.Children = report.Children;

UPDATE : отчет загружается вне метода SaveReport с использованием другого сеанса, и session.dispose () былПозвонил.

Может кто-нибудь сказать, пожалуйста

1) почему NHibernate генерирует исключение, даже если переменная отчета не имеет изменений,

2) Почему нет исключения, когда строка [1] комментируетсяout.

Заранее спасибо!

1 Ответ

1 голос
/ 15 октября 2011

После вашего комментария: вы вводите объект Report, который, вероятно, все еще прикреплен к сеансу, по которому был получен. Сначала вы должны отсоединить его от этого сеанса (Session.Evict).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...