在同一会话中删除和创建Nhibernate中的新子集合

在同一会话中删除和创建Nhibernate中的新子集合,nhibernate,Nhibernate,我需要删除父项中的现有集合并插入新集合条目。这应该发生在同一个事务中。 请检查下面的hbm配置。请让我知道为什么删除没有发生以下代码 <class name="Category" table="Category" schema="dbo" lazy="true"> <id name="ID" access="property" column="Category_ID" unsaved-value="0"> <generator class="native">

我需要删除父项中的现有集合并插入新集合条目。这应该发生在同一个事务中。 请检查下面的hbm配置。请让我知道为什么删除没有发生以下代码

<class name="Category" table="Category" schema="dbo" lazy="true">
<id name="ID" access="property" column="Category_ID" unsaved-value="0">
  <generator class="native">
  </generator>
</id>

<property name ="CategoryName" access="property" column="Category_Name" not-null="true"/>
<bag name="Ratios" access="property"  table="Ratio" inverse="true" cascade="all"  lazy="true">
  <key column="CategoryID" />
  <one-to-many class="Category, Domain" />
</bag>

C#代码:

if(ratios!=null&&ratios.Count>0)
{
比率=比率。其中(a=>a.ID==0);
类别比率=比率;
如果(类别ID==0)
{
_保存(cat);
}
其他的
{
_储存库更新(cat);
}
}
请注意,这在单个Nhibernate会话事务中。 我只使用ratios=ratios.Where(a=>a.ID==0.ToList()传递新集合;
因此集合现在没有在引用中保存实体。

您可能需要手动清除集合并将所有新的
比率添加回集合。我敢肯定,你不能像上面那样将收藏设置为新的参考。当您这样做时,NHibernate无法跟踪对集合的更改

我没有测试以下内容,但它应该更接近您的需要:

cat.Ratios.Clear();
foreach(Ration ratio in ratios)
    cat.Ratios.Add(ratio);

另外,
\u repository.Save(cat)
\u repository.Update(cat)
到底在做什么?如果他们正在调用
ISession.Save
ISession.Update
这是不必要的,因为您可能在一对多集合
比率上设置了级联。您只需在NHibernate通过
i会话跟踪对实体/集合的更改时提交事务,您可能需要手动清除集合并将所有新的
比率添加回集合。我敢肯定,你不能像上面那样将收藏设置为新的参考。当您这样做时,NHibernate无法跟踪对集合的更改

我没有测试以下内容,但它应该更接近您的需要:

cat.Ratios.Clear();
foreach(Ration ratio in ratios)
    cat.Ratios.Add(ratio);
另外,
\u repository.Save(cat)
\u repository.Update(cat)
到底在做什么?如果他们正在调用
ISession.Save
ISession.Update
这是不必要的,因为您可能在一对多集合
比率上设置了级联。当NHibernate通过
ISession
跟踪对实体/集合的更改时,您只需提交事务即可