使用 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的主要内容,如果未能解决你的问题,请参考以下文章