NHibernate会话,saveorupdate,保存

时间:2011-10-14 19:41:28

标签: nhibernate fluent-nhibernate

使用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]时没有异常。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

评论之后:输入一个Report对象,该对象可能仍附加到检索到的会话。您必须先将其从该会话中分离出来(Session.Evict)。