3
我想對我的數據庫表進行軟刪除...我已經應用以下語句(如此處所述http://nhibernate.info/blog/2008/09/06/soft-deletes.html以及有關SO的許多問題)。 Fattura是我的表,我想申請邏輯刪除(有上沒有觸發)軟刪除Nhibernate
Fattura.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Paggentola.Gestionale.DL.Model" namespace="Paggentola.Gestionale.DL.Model">
<class name="Fattura" table="Fattura" where="Cancellato=0">
<id name="Id_Fattura" column="Id_Fattura">
<generator class="native" />
</id>
<property name="Tipo_Fattura" column="Tipo_Fattura" />
<property name="Cancellato" column="Cancellato" />
</class>
</hibernate-mapping>
Fattura.cs - 模型對象
using System;
namespace ModelObject
{
public class Fattura : ISoftDeletable
{
public virtual int Id_Fattura { get; set; }
public virtual Int16 Id_Tipo_Fattura { get; set; }
public virtual Int16 Cancellato { get; set; }
}
}
刪除事件監聽器
public class MyDeleteEventListener : DefaultDeleteEventListener
{
protected override void DeleteEntity(IEventSource session, object entity,
EntityEntry entityEntry, bool isCascadeDeleteEnabled,
IEntityPersister persister, ISet transientEntities)
{
if (entity is ISoftDeletable)
{
var e = (ISoftDeletable)entity;
e.Cancellato = 1;
CascadeBeforeDelete(session, persister, entity, entityEntry, transientEntities);
CascadeAfterDelete(session, persister, entity, transientEntities);
}
else
{
base.DeleteEntity(session, entity, entityEntry, isCascadeDeleteEnabled,
persister, transientEntities);
}
}
}
配置以這種方式
configuration.SetListener(ListenerType.Delete, new MyDeleteEventListener());
事件火,但它不設置Cancellato = 1。 這是我的DeleteCommand
public void Delete(T entity)
{
NHibernateSession.Delete(entity);
NHibernateSession.Flush();
}
你需要'transaction.Open'和'commit'沒有'commit'它不會保存任何東西到你的分區 – harry180
錯誤,因爲硬刪除工作正常... –
在nhibernate中的硬刪除得到建立交易或作爲我們開箱即用 – harry180