Je sais qu'il y a beaucoup de discussions à ce sujet, mais j'ai essayé tout ce que je pouvais voir depuis un moment maintenant mais toujours pas de chance.Supprimer de la collection ne fonctionne pas à Nhibernate
J'ai un objet Item, qui contient une collection de itemdocument. En utilisant nhibernate pour lier à la base de données, je peux facilement ajouter à ma collection de itemdocument, mettre à jour des éléments dedans, etc, mais quoi que je fasse, je ne peux pas supprimer.
Je charge l'élément de la même session que j'essaie de supprimer. J'ai même ajouté la session en tant que propriété de l'objet item, et j'utilise cette propriété pour l'enregistrer, juste au cas où. Si j'utilise un Session.Delete() sur un document item dans la collection, puis que je réenregistre l'objet item (sans retirer le document item de la collection), il crée en fait un nouvel objet, qui doit être attendu. Cela me dit que mes économies fonctionnent.
J'espère que tout cela est logique, je reçois un peu frustré et pourrait ne pas être aussi clair que je veux ...
Voir mes correspondances pour l'objet d'article:
<?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>
Mapping pour l'objet 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>
code pour la suppression:
//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);
Est-ce enveloppé dans de toute sorte de transaction? – apollodude217
Je ne sais pas si cela est important ici, mais la valeur non enregistrée de ItemDocumentId doit-elle être 0? – apollodude217
ItemDocumentId n'est pas 0 car il existe. Voulez-vous dire que je devrais le faire 0 si je veux le supprimer? Pour la transaction, pas de différence si j'en utilise un ou pas. Faire une mise à jour à ItemDocument persiste dans la base de données, donc je suppose que les transactions ne sont pas mon problème ici. – David