我在使用NHibernate保存对象时遇到了问题。下面的report变量没有任何更改,但是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行被注释掉,也没有例外,但我需要在保存它之前对report变量进行更改。例如,使用第2行下面的行
report.Children = report.Children;UPDATE:使用其他会话在SaveReport方法之外加载报表,并调用了session.dispose()。
有谁能告诉我
1)为什么NHibernate抛出异常甚至报告变量都没有更改,
2)当第1行被注释掉时,为什么没有例外。
提前谢谢你!
发布于 2011-10-15 13:18:38
在您的评论之后:您输入一个Report对象,该对象可能仍然附加到检索该会话的会话。您必须先将它与该会话分离(Session.Evict)。
https://stackoverflow.com/questions/7772755
复制相似问题