使用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]时没有异常。
提前谢谢!
答案 0 :(得分:1)
评论之后:输入一个Report
对象,该对象可能仍附加到检索到的会话。您必须先将其从该会话中分离出来(Session.Evict
)。