NHibernate、DTO 和 NonUniqueObjectException

标签 nhibernate dto

我们使用 DTO 模式将我们的域对象从服务层编码到我们的存储库,然后通过 NHibernate 向下编码到数据库。

我遇到了一个问题,我从存储库中提取了一个 DTO(例如 CustomerDTO),然后将其转换为服务层中的域对象(客户)。然后我尝试保存一个包含相同客户对象的新对象(例如 SalesOrder)。这又被转换为 SalesOrderDTO(和 CustomerDTO)以推送到存储库。

NHibernate 不喜欢这样——它提示 CustomerDTO 是重复记录。我假设这是因为它在同一个 session 中取出了第一个 CustomerDTO,并且因为返回已经来回转换它无法将其识别为同一个对象。

我是被困在这里还是有办法解决这个问题?

谢谢

詹姆斯

最佳答案

您可以使用 Lock 将对象重新附加到 NHibernate 中的 session ,例如

_session.Lock(myDetachedObject, NHibernate.LockMode.None);

这可能有帮助,也可能没有帮助,具体取决于这里发生的事情。附带说明一下,将 DTO 与 NHibernate 一起使用并不是最常见的做法,NHibernate(主要)支持持久性无知这一事实意味着通常 DTO 不像其他一些 ORM 框架那样广泛使用。

关于NHibernate、DTO 和 NonUniqueObjectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/862097/

相关文章:

java - QueryDSL - 谓词转换 : change root path and check structure

asp.net-mvc - 使用DTO在服务层和UI层之间传输数据

nhibernate - 如何在NHibernate单元测试中管理 session ?

c# - 如何处理实现多个接口(interface)的对象的 Dtos?

c# - 为什么 NHibernate 抛出 "StaleObjectStateException"?

.NET ORM - NHibernate(或 SubSonic 或其他)与使用 Entity Framework 相比有什么优势?

java - 与提供者和不可变对象(immutable对象)的深度映射

java - 如何防止 mapstruct 映射大量字段而不必手动排除它们?

entity-framework - 在.NET Core 5上运行的ORM

asp.net - NHibernate 中的自动更新包