2009-08-08 94 views
4

我是NHibernate世界的新手。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> 

缺少什么我在这里?

+0

这是逆=真正的问题。但都给了我很好的路径来解决我的问题。谢谢 – vIceBerg 2009-08-09 01:28:47

回答

6

我不完全清楚的原因,但我认为这可能是因为inverse="true"部分。这意味着我认为这意味着这种关系是由另一方来管理的,即从领土到国家,所以从Country.Territories删除该项目可能无法完全按照您的预期工作。

您的地区地图是什么样子的? - 我认为它对国家家长有一个多对一的参考?尽管如此,我的NHibernate知识仍然主要处于“摆弄设置直到它像我想要的那样工作”的层面。但我很确定您可以通过调整inverse属性和/或cascade选项(即尝试将其更改为“全部”)来使其工作。

对于它的价值,我们的大部分映射使用一个一对多的这个样子,我觉得我们平时删除的东西以同样的方式为您呈现:

<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> 
+0

谢谢。我会在工作时看看这个。 – vIceBerg 2009-08-08 21:32:25

2

我挣扎着一个类似但不同的NHibernate问题,并没有被删除。对my question的回答可能会给你一些见解,即使它不完全相同的问题。

+0

谢谢。我会在工作时看看这个。 – vIceBerg 2009-08-08 21:31:52

+0

+1这帮助我走上正轨。 – JasonCoder 2010-10-21 19:30:57