0

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

它似乎适用于某些东西,但是当我们这样做时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")

有任何想法吗?

4

1 回答 1

1

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

如果您对其进行更改,并需要保存这些更改,您需要使用该Update()方法(如@OskarBerggren 所述)或该SaveOrUpdate()方法基本上检查并决定是保存对象还是更新它。最后一个可能最适合您的情况。改变你的电流,

session.Save(object);

至,

session.SaveOrUpdate(object);

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

ActiveRecordMediator.GetSessionFactoryHolder().CreateSession()

创建一个Session你可以用来保存你的模型。

于 2013-01-18T15:21:16.743 回答