gpt4 book ai didi

c# - NHibernate 树结构更新根问题

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:28 25 4
gpt4 key购买 nike

我有一个树结构映射到表中的数据库,如下所示:

UID numeric(18, 0)
NodeUID varchar(50)
Text nvarchar(50)
TreeLevel int
ParentUID varchar(50)
OrderInLevel int
IsLeaf bit

这是一张旧 table ,我无法更改它,请耐心等待...

NodeUID 是一个 GUID。

ParentUID 列映射到不同行的 NodeId。

根节点在其 ParentUID 列中的值为“0”。

我正在尝试像这样用 NHibernate 映射树:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="BasicFW.Core.Domain.NavigationTree.UsersNavigationTreeNode, BasicFW.Core" table="bDoxTreeNodes" lazy="false" schema="bDox.dbo">
<id name="NodeUId">
<column name="NodeUID"/>
<generator class="assigned"/>
</id>
<property name="Text">
<column name="Text"/>
</property>
<property name="TreeLevel">
<column name="TreeLevel"/>
</property>
<property name="IsLeaf">
<column name="IsLeaf"/>
</property>

<many-to-one name="Parent" class="BasicFW.Core.Domain.NavigationTree.UsersNavigationTreeNode, BasicFW.Core" column="ParentUID" not-found="ignore"/>

<bag name="Children" lazy="false" order-by="OrderInLevel ASC" cascade="all-delete-orphan" inverse="true">
<key column="ParentUID"/>
<one-to-many class="BasicFW.Core.Domain.NavigationTree.UsersNavigationTreeNode, BasicFW.Core" />
</bag>
</class>
</hibernate-mapping>

问题是,当我尝试更新节点(和指定的根节点)时,Parent 属性为 null,因此 NHibernate 尝试将 ParentUID 列更新为 null,因此失败,因为 to column 不会接受空值。

谢谢

最佳答案

你能为那个表创建一个触发器吗?如果是,您也许可以创建一个在更新/插入之前触发的触发器。像这样的东西:

create trigger TreeNode_before before insert, update
on TreeNode
referencing NEW as _new
for each row
begin
if _new.ParentUID is null then
set _new.ParentUID = '0';
end if;
end;

编辑:另一种方法是使用拦截器。我自己没有使用过它,但根据以下问题,它也应该适用于您的情况。

编辑:修复了链接。 NHibernate write value = NULL when ID < 0

关于c# - NHibernate 树结构更新根问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5140321/

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