我们使用 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/