我知道这方面有很多线索,但我一直在尝试我可以看到的一段时间,但仍然没有运气。从收藏中删除不在Nhibernate中工作
我有一个Item对象,其中包含一个itemdocument的集合。使用nhibernate链接到数据库,我可以轻松地添加到我的itemdocument集合,更新它中的项目等,但无论我做什么,我都无法删除。
我从同一个会话加载项目,我尝试从中删除它。我甚至将该会话添加为项目对象的属性,并使用该属性来保存它,以防万一。
如果我在集合中的itemdocument上使用Session.Delete(),然后重新保存项目对象(不删除集合中的itemdocument),它实际上会创建一个新对象,预期。所以这告诉我我的Save正在工作。
我希望这一切是有道理的,我变得有点沮丧,可能不明确的,因为我想...
见我映射项目目标:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="namespace.Business.BusinessEntity">
<class name="Item, namespace" table="[dbo].[Item]">
<id name="ItemId" column="ItemId" type="Int32" unsaved-value="0">
<generator class="identity" />
</id>
<property name="ItemCode" column="ItemCode" type="String" length="50" />
<property name="InternalDescription" column="InternalDescription" type="String" length="254" />
<property name="IsEnabled" column="IsEnabled" type="Boolean" />
<property name="Size" column="Size" type="String" length="50" />
<set name="Pictures" cascade="all-delete-orphan" inverse="true" >
<key column="ItemId" not-null="true"/>
<one-to-many class="ItemDocument" />
</set>
</class>
</hibernate-mapping>
映射对于Itemdocument对象:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="namespace.Business.BusinessEntity">
<class name="ItemDocument, namespace" table="[dbo].[ItemDocument]">
<id name="ItemDocumentId" column="ItemDocumentId" type="Int32">
<generator class="identity" />
</id>
<property name="Order" column="[Order]" type="Int32" />
<many-to-one name="Item" class="Item" column="ItemId" not-null="true" />
<many-to-one name="Document" class="Document" column="DocumentId" cascade="save-update" not-null="true"/>
</class>
</hibernate-mapping>
代码删除:
//This does nothing
item.Pictures.Remove(item.Pictures.ElementAt(0));
session.SaveOrUpdate(item);
//This neither
session.Delete(item.Pictures.ElementAt(0));
item.Pictures.Remove(item.Pictures.ElementAt(0));
session.SaveOrUpdate(item);
是这个包裹的任何类型的交易的内部? – apollodude217 2010-07-05 02:48:06
我不确定这是否重要,但ItemDocumentId的未保存值是否应为0? – apollodude217 2010-07-05 02:49:39
ItemDocumentId不是0,因为它确实存在。你是说我应该让它变成0,如果我想删除它? 对于交易,如果我使用一个没有差异。对ItemDocument进行更新会持续到数据库,所以我假设事务不是我的问题。 – David 2010-07-05 02:53:31