2012-09-06 99 views
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(); 
    } 
+2

你需要'transaction.Open'和'commit'沒有'commit'它不會保存任何東西到你的分區 – harry180

+0

錯誤,因爲硬刪除工作正常... –

+1

在nhibernate中的硬刪除得到建立交易或作爲我們開箱即用 – harry180

回答

0

我的映射文件有錯誤。屬性

<property name="Cancellato" column="Cancellato" /> 

在我的數據庫列中有不同的名稱。這樣就不會更新。我只是不明白爲什麼在運行時沒有錯誤...

我已經設置了相同的名稱並正常工作。