使用 Nhibernate 更新不是身份的对象 ID

Posted

技术标签:

【中文标题】使用 Nhibernate 更新不是身份的对象 ID【英文标题】:updating an object's ID which is not an identity using Nhibernate 【发布时间】:2011-11-26 21:42:10 【问题描述】:

我有一个已经存在于数据库中的对象,我想修改它的 ID, Nhibernate 将其视为一个新对象并将其保存而不是更新。 我有很多愚蠢的解决方案,但我想要一个有效的解决方案。

【问题讨论】:

如果您从逻辑上考虑,“ID”就是您的对象的身份。不同的 ID = 不同的对象。所以很自然,当你改变一个对象的 ID 时,它就不再是同一个对象了。通常,更改对象的 id 不是一个好习惯。你能解释一下你的场景和你的需求吗? 场景很简单,我只想自己更新id 【参考方案1】:

这有点难以回答,因为很不清楚你想做什么......这个问题的背景是什么?为什么还要换身份证?也许它类似于客户 ID?

好吧,我想说最好的解决方案是将业务逻辑与技术逻辑分开。通常建议使用无意义的主键。当然有反对的理由,但是如果您已经知道您的 ID 可能会更改,我会说添加一个不会更改的 ID。

无论如何,如果你不能添加一个不会改变的无意义的ID,只需先删除旧ID的实体,然后添加新ID的新实体。

【讨论】:

是的,当然有很多解决方案。但我正在寻找一种棘手且最佳的方法来避免仅仅因为 nhiberante 中的问题而更改数据库设计【参考方案2】:

据我所知,唯一的方法是删除和插入行,但我会使用native SQL query。

【讨论】:

以上是关于使用 Nhibernate 更新不是身份的对象 ID的主要内容,如果未能解决你的问题,请参考以下文章

NHibernate 中的自动更新包

Fluent nHibernate 保存或更新派生实体

使用 NHibernate 进行级联更新一对多

NHibernate - 仅更新在运行时识别的指定对象属性

当设置了级联保存更新属性时,NHibernate 会不必要地更新对象吗?

NHibernate学习教程--事务Transactions