[英]Soft Delete Nhibernate
I want to make a soft delete on my db table...i have apply following statement (as described here http://nhibernate.info/blog/2008/09/06/soft-deletes.html and in a lot of question on SO). 我想在我的数据库表上进行软删除...我已经应用了以下语句(如此处所述http://nhibernate.info/blog/2008/09/06/soft-deletes.html并且在很多问题中在SO)。 Fattura is my table where i want apply logical delete (there is no trigger on it)
Fattura是我的表,我想要应用逻辑删除(没有触发器)
Fattura.hbm.xml 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 - Model Object 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; }
}
}
Delete event Listener 删除事件监听器
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);
}
}
}
Configured in that way 以这种方式配置
configuration.SetListener(ListenerType.Delete, new MyDeleteEventListener());
The event fire but it doesn't set Cancellato =1. 事件触发但它没有设置Cancellato = 1。 This is my DeleteCommand
这是我的DeleteCommand
public void Delete(T entity)
{
NHibernateSession.Delete(entity);
NHibernateSession.Flush();
}
There is an error on my mapping file. 我的映射文件有错误。 Property
属性
<property name="Cancellato" column="Cancellato" />
haven't same name in my database column. 在我的数据库列中没有相同的名称。 In that way it's not updated.
这样它就不会更新了。 I just don't understand why at runtime there is no error...
我只是不明白为什么在运行时没有错误...
I have set same name and work fine. 我设置了相同的名称,工作正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.