Я ищу способ остановить элементы, которые удаляются из таблицы многих из многих. Я нашел сообщение о том, что могу использовать IPostCollectionRemoveEventListener и/или IPostCollectionRecreateEventListener. Проблема в том, что ни один из них не запускается.Nhibernate Many to Many Soft Удалить
Пример:
Допустим, у нас есть таблица продуктов и заказ столика. Заказ может состоять из нескольких продуктов. Продукт можно продавать несколько раз (поэтому он упоминается в нескольких заказах). Это место, где многие из многих Table, ProductOrder, встают на свои места. Все эти таблицы имеют столбцы IsDeleted даже многие для многих.
Многие из многих таблиц непосредственно не отображаются в моем проекте C#. Я использую HasManyToMany.
Mapping продукта:
HasManyToMany(x => x.Orders)
.ChildKeyColumn("OrderId")
.AsSet()
.ParentKeyColumn("ProductId")
.LazyLoad()
.Table("ProductOrder")
.Not.Inverse()
.Where("IsDeleted != 1");
Отображение заказа:
HasManyToMany(x => x.Products)
.ChildKeyColumn("ProductId")
.AsSet()
.ParentKeyColumn("OrderId")
.LazyLoad()
.Table("ProductOrder")
.Not.Inverse()
.Where("IsDeleted != 1");
Это все работает отлично, пока я не удалять элементы из продуктов или инкассовых поручений. Это приводит к полному удалению, в то время как я предпочитаю использовать мягкое удаление, установив для свойства IsDeleted значение 1, но я не могу найти способ предотвратить заявление об удалении ...
Пример кода, как я удаляю и сохраняю изменения:
var order = ...;
var product= ...;
product.Orders.Remove(order);
...
SessionHandler.CurrentSession.Update(product);
SessionHandler.CurrentSession.Flush();
Вам не нужно вызывать обновление в сеансе (если все объекты привязаны, то есть они исходят из запроса, а не из-за пределов сеанса). –
см., Если это помогает http://nhibernate.info/blog/2008/09/06/soft-deletes.html –
Я опробовал DefaultDeleteEventListener, но он запускается только при использовании в сущности, а не в коллекции объектов. – Beejee