gpt4 book ai didi

nhibernate - 为什么我的 NHibernate 包集合没有动态设置 child 的 'parent id'?

转载 作者:行者123 更新时间:2023-12-04 07:30:48 25 4
gpt4 key购买 nike

我有一个新对象,其中包含一些作为 IList 的属性的新对象集合。我通过 sql 探查器看到正在执行两个插入查询。这是我对父级的映射:

<id name="BackerId">
<generator class="guid" />
</id>
<property name="Name" />
<property name="PostCardSizeId" />
<property name="ItemNumber" />

<bag name="BackerEntries" table="BackerEntry" cascade="all" lazy="false" order-by="Priority">
<key column="BackerId" />
<one-to-many class="BackerEntry" />
</bag>

在 Backer.cs 类上,我将 BackerEntries 属性定义为
IList<BackerEntry>

当我尝试 SaveOrUpdate 传入的实体时,我在 sql 探查器中得到以下结果:

exec sp_executesql N'INSERT INTO Backer (Name, PostCardSizeId, ItemNumber, BackerId) VALUES (@p0, @p1, @p2, @p3)',N'@p0 nvarchar(3),@p1 uniqueidentifier,@p2 nvarchar(3) ),@p3
uniqueidentifier',@p0=N'qaa',@p1='BC95E7EB-5EE8-44B2-82FF30F5176684D',@p2=N'qaa',@p3='18FBF8CE-FD22-4D08-A3B1-63D6DFF426E

exec sp_executesql N'INSERT INTO BackerEntry (BackerId, BackerEntryTypeId, Name, Description, MaxLength, IsRequired, Priority, BackerEntryId) VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7) ',N'@p0 uniqueidentifier,@p1 uniqueidentifier,@p2 nvarchar(5),@p3 nvarchar(5),@p4 int,@p5 bit,@p6 int,@p7 uniqueidentifier',@p0='00000000-0000 -0000-0000-000000000000',@p1='2C5BDD33-5DD3-42EC-AA0E-F1E548A5F6E4',@p2=N'qaadf',@p3=N'wasdf',@p4=0,@p5=1 p6=0,@p7='FE9C4A35-6211-4E17-A75A-60CCB526F1CA'

如您所见,它不会将子节点上 BackerId 的空 guid 重置为父节点的新真实 guid。

最后,异常抛出是:
"NHibernate.Exceptions.GenericADOException: could not insert: [CB.ThePostcardCompany.MiddleTier.BackerEntry][SQL: INSERT INTO BackerEntry (BackerId, BackerEntryTypeId, Name, Description, MaxLength, IsRequired, Priority, BackerEntryId) VALUES (?, ?, ?, ?, ?, ?, ?, ?)] ---\u003e System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint

编辑:解决了!下面的第一个答案为我指明了正确的方向。我需要在子映射和类上添加反向引用。这允许它以纯粹的 .net 方式工作 - 然而,当接受 json 时,有一个断开连接,所以我不得不想出一些古怪的代码来“重新附加” children 。

最佳答案

您可能需要将 NOT-NULL="true"添加到您的映射类:

<bag name="BackerEntries" table="BackerEntry" cascade="all" lazy="false" order-by="Priority">
<key column="BackerId" not-null="true"/>
<one-to-many class="BackerEntry" />
</bag>

并确保您具有为子类定义的映射的反向:
<many-to-one name="parent" column="PARENT_ID" not-null="true"/>

我在当前的父子关系项目中遇到了类似的 hibernate 问题,这是解决方案的一部分。

关于nhibernate - 为什么我的 NHibernate 包集合没有动态设置 child 的 'parent id'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/146604/

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