gpt4 book ai didi

c# - NHibernate 删除集合中的项目不起作用

转载 作者:太空狗 更新时间:2023-10-30 00:36:39 25 4
gpt4 key购买 nike

我是 NHibernate 世界的新手。

为什么此代码可以从集合中删除领土:

Country country;

using (IUnitOfWork unit = UnitOfWork.Start())
{
country = new Country();
country.Name = "My country";

Territory territory = new Territory();
country.Territories.Add(territory);
country.Territories.Remove(territory);
}

这段代码不起作用:

Country country;

using (IUnitOfWork unit = UnitOfWork.Start())
{
country = _countries.GetById(1);

Territory territory = new Territory();
country.Territories.Add(territory);
country.Territories.Remove(territory);
}

在第二个代码片段中,_countries 是一个存储库。数据库中存在国家 ID 1。添加了领土,但从未删除...

这是映射:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="iCible.Artishows.Framework.ObjectDefinition"
namespace="iCible.Artishows.Framework.ObjectDefinition" >
<class name="Country" >
<id name="ID">
<generator class="identity"/>
</id>
<property name="Name" />
<set name="Territories" cascade="all-delete-orphan" inverse="true" order-by="Name" sort="iCible.Artishows.Framework.ObjectDefinition.TerritoryComparer">
<key column="COUNTRYID"/>
<one-to-many class="Territory"/>
</set>
<property name="CreationDate" />
<property name="EditionDate" />
<many-to-one class="User" name="CreationUser"/>
<many-to-one class="User" name="EditionUser"/>
</class>
</hibernate-mapping>

我在这里错过了什么?

最佳答案

我不是很清楚原因,但我认为这可能是因为 inverse="true" 部分。我认为,这意味着关系由另一方管理,即从 Territory 到 Country,因此从 Country.Territories 中删除该项目可能无法正常工作如你所料。

您的 Territory map 是什么样的? - 我假设它对 Country parent 有一个多对一的引用?

话虽如此,我的 NHibernate 知识仍然主要处于“摆弄设置直到它按照我想要的方式工作”的水平。但我很确定您可以通过调整 inverse 属性和/或 cascade 选项(即尝试将其更改为“all” ).

就其值(value)而言,我们大多数使用一对多的映射看起来像这样,我认为我们通常以与您展示的相同的方式删除内容:

<class name="Parent">
<id name="ParentID">
...
<map name="ChildCollection" cascade="all" inverse="true">
</class>

<class name="Child">
...
<many-to-one name="Parent" column="ParentID" not-null="true">
</class>

关于c# - NHibernate 删除集合中的项目不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1249300/

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