Я знаю, что вокруг этого много, но я пытался все, что мог видеть какое-то время, но все равно не повезло.Удалить из коллекции, не работающей в Nhibernate
У меня есть объект Item, который содержит коллекцию itemdocument. Используя nhibernate для ссылки на базу данных, я могу легко добавить в свою коллекцию itemdocument, обновить элементы в ней и т. Д., Но что бы я ни делал, я не могу удалить.
Я загружаю элемент из того же сеанса, с которого я пытаюсь удалить его. Я даже добавил сессию как свойство объекта item, и на всякий случай использую это свойство, чтобы сохранить его.
Если я использую Session.Delete() в itemdocument в коллекции, а затем я повторно сохраняю объект item (не удаляя 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>
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
Я не уверен, что это имеет значение здесь, но если несохраненная ценность ItemDocumentId равна 0? – apollodude217
ItemDocumentId не является 0, потому что он существует. Вы говорите, что я должен сделать это 0, если я хочу его удалить? Для транзакции нет разницы, если я использую один или нет. Выполнение обновления в ItemDocument сохраняется в БД, поэтому я предполагаю, что транзакции не являются моей проблемой здесь. – David