gpt4 book ai didi

c# - 流利的 NHibernate NonUniqueObjectException

转载 作者:行者123 更新时间:2023-11-30 22:18:14 30 4
gpt4 key购买 nike

我有一个包含子实体集合的父实体,几乎每次我访问该父实体时都需要从 web 服务更新这些子实体。我想我可以只对集合执行 Clear(),然后添加我从 Web 服务收到的实体列表。当我收到的实体没有与我刚刚清除的任何实体相同的 ID 时,它似乎工作正常,但如果任何 ID 相同,我将得到 NonUniqueObjectException。因为我正在清除它们,所以不应该在插入新实体之前删除它们吗?为什么 ID 相同很重要?

最佳答案

即使您的 ID 相同,对象本身实际上并不相同。您可以通过执行您的对象来验证这一点。 watch 中的 GetHashCode()。

NHibernate 认为这是一个新的数据库对象并想插入它。

您需要保留原始对象并将新值复制到其中。

您可以逐个属性手动复制这些值 - 但我建议将其动态化,这样您就不需要为每种对象类型都使用一个方法。

您可以使用反射编写自己的动态方法或使用第三方映射器...试试 AutoMapper https://github.com/AutoMapper/AutoMapper

复制属性时要小心。如果您的 child 对象还有任何其他 child 也被映射,您将再次遇到同样的问题。

关于c# - 流利的 NHibernate NonUniqueObjectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16203923/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com