在我目前的项目中,我们收到了一个非常不寻常的请求(对我而言)。客户端希望所有删除过程都标记一个标志,而不是从数据库表中物理删除该记录。乍一看看起来很简单。我只是有变化
public void DeleteRecord(Record record)
{
record.DeleteAndFlush();
}
public IList GetAllRecords()
{
Record.FindAll().ToList();
}
到
public void DeleteRecord(Record record)
{
record.Deleted = true;
record.UpdateAndFlush();
}
public IList GetAllRecords()
{
Record.FindAll().Where(x=>x.Deleted==false).ToList();
}
但是在我得到一点时间后再想想。我发现这个小小的改变会导致我的级联设置出现大问题。因为我对Active Record业务很陌生。我不相信自己只需将所有CascaeEnum.Delete更改为CascadeEnum.SaveUpdate。所以,我在这里寻找一些意见。
1)标志是一个标志而不是一个普通的标志吗?
2)如果对问题1的回答是肯定的,那么我相信NHibernate内置了一些东西来处理这个问题。有人能告诉我这种问题的正确方法是什么?
感谢您的意见。
答案 0 :(得分:2)
这被称为Soft Deletes,它很常见。关于最佳做法存在争议 - 请查看最近的博客文章:http://ayende.com/Blog/archive/2009/08/30/avoid-soft-deletes.aspx
答案 1 :(得分:2)
这很常见,称为“soft delete”。 Here's an implementation这对于NHibernate来说。
答案 2 :(得分:1)
这是一个相对常见的请求,有时会(至少)有两个原因: