在我目前的项目中,我们得到了一个相当不寻常的请求(对我来说)。客户端希望所有删除过程标记一个标志,而不是从数据库表中物理删除该记录。第一眼看起来很容易。我只是改变用Castle ActiveRecord标记“已删除”而不是物理删除
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中有内置的东西来处理这个问题。有人能告诉我什么是这种问题的正确方法吗?
感谢您的输入。
感谢您的快速回复。感觉很好,发现像ayende这样的大公司也有类似的担忧:) – 2009-09-29 01:51:08