1
4
我认为在存储库级别这样做更合适。主要是因为将来您可能会决定向存储库添加一些不通过MVC的访问方法(例如,数据的WCF接口)。 所以问题就变成了,你如何解决你在NHiberinate层列出的缺点? 过滤出有用的实体就足够简单了。我可能会通过实体类型上的自定义属性来实现这一点。您可以标记您想要跟踪的实体,或者不想跟踪的实体;以容易的为准。 弄清楚控制器的真正意图是困难的。我将对您是否可以“获得httpContext”提出质疑;我认为在存储库中这样做不是一个好主意,因为关注点的分离。存储库不应依赖于Web。一种方法是在存储库中为您希望跟踪的不同操作创建自定义方法;如果这些编辑的其他方面行为不同,例如不同的安全性,则这一点尤其有吸引力。另一种方法是通过比较对象的新旧版本来检查更改,并得出更改的实际性质。第三种方法是不尝试派生更改的性质,只将前后版本存储在日志中,这样读取日志的人就可以自己解决问题。 |
2
1
我宁愿把它放在数据层(在你的例子中是NHibernate)。把它放在控制器中,并要求其他人(或者你自己,将来)实现控制器,这与面向对象的设计原则相冲突。 |
3
1
我用NHibernate做这个。需要审计的对象实现IAudTable接口,我使用拦截器对实现IAudTable的任何对象进行审计,方法是截取onFlushDirty、OnDelete和OnSave。 |
Nico Pizzo · 子查询上的nhibernate联接 6 年前 |
YMC · 无法在Nhb 4中构建只有特定字段可供选择的2个表联接 6 年前 |
Stu · 具有特定类型的字符串外键的NHibernate映射 6 年前 |
Zout · 为Hibernate的HiLo算法管理的列生成ID 7 年前 |