Mysql 具有相同标识符值的不同对象已与实体的会话XXX关联

Mysql 具有相同标识符值的不同对象已与实体的会话XXX关联,mysql,asp.net-mvc,asp.net-mvc-3,nhibernate,nhibernate-3,Mysql,Asp.net Mvc,Asp.net Mvc 3,Nhibernate,Nhibernate 3,我们有一个ASP.NET MVC 3 C#项目,运行NHibernate 3和Castle.ActiveRecord for MySQL,我们试图让“每个请求一个会话”来工作 它似乎对某些东西有效,但当我们执行SaveAndFlush()时,该命令会给我们一个错误: A different object with the same identifier value was already associated with the session: 142 如果我们只尝试执行Save(),我们会

我们有一个ASP.NET MVC 3 C#项目,运行NHibernate 3和Castle.ActiveRecord for MySQL,我们试图让“每个请求一个会话”来工作

它似乎对某些东西有效,但当我们执行
SaveAndFlush()
时,该命令会给我们一个错误:

A different object with the same identifier value 
was already associated with the session: 142
如果我们只尝试执行
Save()
,我们会得到相同的消息,因此它与
Flush()
函数无关

我在搜索时找到了一些结果,但我无法使用它来工作

我不知道该怎么做,所以没有测试过的东西是

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")

有什么想法吗?

基本上,问题可能在于您试图
保存()一个已经存在的对象。如果对象已设置标识符(
object.Id=142
),则不需要保存该对象

如果您对其进行了更改,并且需要保存这些更改,则需要使用
Update()
方法(如@oskarbergren所述)或
SaveOrUpdate()
来检查并决定是保存还是更新对象。最后一个可能对你最有效。改变你的现状

session.Save(object);
对,

Session
对象来自NHibernate的
SessionFactory
实现。但是,我看到您正在使用
ActiveRecordMediator
,因此您可以使用

ActiveRecordMediator.GetSessionFactoryHolder().CreateSession()

要创建一个
会话
您可以使用来保存模型。

您知道save()、Update()和save()之间的区别吗?SaveAndFlush中的文本在对象/模型上表示,如果其alrady存在,则其更新。。。我们已经在应用程序中使用了多年,但现在当我们更改为“每个请求一个会话”时,它开始成为一个问题。。。
ActiveRecordMediator.GetSessionFactoryHolder().CreateSession()