2012-09-06 104 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" /> 

在我的数据库列中有不同的名称。这样就不会更新。我只是不明白为什么在运行时没有错误...

我已经设置了相同的名称并正常工作。