2011-01-17 16 views
2

私はActiveRecordをnHibernateで使用しています。ソフト削除を実装しようとしているので、オブジェクトは実際に削除するのではなく、 "IsDeleted"とマークされています。私は明らかにカスケードオプションが必要です。ソフト削除 - リスナーを使用したActiveRecord

[assembly: AddEventListener(typeof(MyNamespace.SoftDeleteListener))] namespace MyNamespace { public class SoftDeleteListener : DefaultDeleteEventListener 
{ 
    protected override void DeleteEntity(IEventSource session, object entity, EntityEntry entityEntry, bool isCascadeDeleteEnabled, 
     IEntityPersister persister, ISet transientEntities) 
    { 
     if (entity is IPermanentRecord) 
     { 
      ((IPermanentRecord)entity).IsDeleted = true; 
      this.CascadeBeforeDelete(session, persister, entity, 
       entityEntry, transientEntities); 
      this.CascadeAfterDelete(session, persister, entity, transientEntities); 
     } 
     else 
     { 
      base.DeleteEntity(session, entity, entityEntry, 
       isCascadeDeleteEnabled, persister, transientEntities); 
     } 
    } 
} 

}

マイエンティティ - "製品"

interface IPermanentRecord 
{ 
    bool IsDeleted { get; set; } 
} 

を実装し、問題はそれだけで、それを削除するエンティティを削除すると、リスナーが起動されません、です!

興味を持っている人には

答えて

1

...

私はNHibernateはコンフィギュレーションを発見し、リスナーを手動で追加し、それが

foreach (NHibernate.Cfg.Configuration cfg in ActiveRecordMediator.GetSessionFactoryHolder().GetAllConfigurations()) 
     { 
      cfg.SetListener(ListenerType.Delete, new SoftDeleteListener()); 
      cfg.AddAssembly(assem); 
     } 
+0

こんにちはポール..解雇しました。私はRegistered Listenerを持っていて、それは発生します...しかし、それは更新されていません...あなたは私を助けることができますか? –

関連する問題