首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >软删除Nhibernate

软删除Nhibernate
EN

Stack Overflow用户
提问于 2012-09-06 08:34:39
回答 1查看 1.6K关注 0票数 3

我想在我的db表上做一个软删除.我已经应用了以下声明(如这里所描述的,http://nhibernate.info/blog/2008/09/06/soft-deletes.html和关于SO的许多问题)。Fattura是我要应用逻辑删除的表(没有触发器)

Fattura.hbm.xml

代码语言:javascript
复制
<?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 -模型对象

代码语言:javascript
复制
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; }
    }
}

删除事件侦听器

代码语言:javascript
复制
    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);
            }
        }
    }

以这种方式配置

代码语言:javascript
复制
configuration.SetListener(ListenerType.Delete, new MyDeleteEventListener());

事件触发,但它没有设置Cancellato =1。

代码语言:javascript
复制
   public void Delete(T entity)
    {
        NHibernateSession.Delete(entity);

        NHibernateSession.Flush();
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-10 07:54:48

映射文件上有一个错误。属性

代码语言:javascript
复制
 <property name="Cancellato" column="Cancellato" />

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

我已经设置了相同的名字和工作很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12296076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档