覆盖NHibernate中的删除行为

Dav*_*vid 4 sql nhibernate overriding

在我的应用程序中,用户无法真正删除记录.而是将记录的Deleted字段设置为1,从而将其隐藏在选择中.

我需要保持这种行为,我正在研究NHibernate是否适合我的应用程序.我可以覆盖NHibnernate的删除行为,以便不发出DELETE语句,而是发出UPDATES,如上所述?

我显然还需要覆盖其SELECT行为以包含' AND Deleted = 0'子句.或者从视图中读取.我不确定.

nw.*_*nw. 12

要实现软删除,只需绕过Hibernate删除机制.而是将表的Deleted字段映射到.Net布尔属性的相同名称.要删除项目,请进行设置item.Deleted = true.然后where向类映射添加属性以过滤掉已删除的项.如果您愿意,为已删除的项目创建另一个映射.否则它们将对您的应用程序不可见,但也许这就是您想要的.

编辑:这可能是一种更好的方法:使用<sql-delete>标记为您的映射编写自定义删除操作.请参阅http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html#querysql-cud.我认为这与该where属性的组合将只是票.例如:

<class name="MyClass" table="my_table" where="deleted=0">
  ...
  <sql-delete>UPDATE my_table SET deleted=1 WHERE id=?</sql-delete>
</class>
Run Code Online (Sandbox Code Playgroud)