我现在正在使用该IPostUpdateEventListener
界面来更新审计日志,获取旧值和新值,然后将每个更新的字段存储在“审计”表中以及所有这些内容。效果很好,但是我很难满足最后两个要求:
- 显示更新是针对哪个员工的。
- 显示更新的字段的“友好”名称。
对于#1,我的第一直觉是使用反射并查找并获取给定实体上的“员工”属性以找出它是为哪个员工服务的,但是当您在图中深入一些对象时,它很快就会分崩离析没有自动返回给定 Employee 对象的方法。
解决 #1 的想法包括要求每个对象都有一个“父”属性,这样我就可以遍历图表以查找 Employee 类型(对我来说,对于简单的持久性问题来说,这会过多地污染我们的域)到使用单独的 SQL事后遍历外键并填写员工 ID 的作业(我宁愿不维护单独的 SQL 作业,因为到目前为止一切都是基于代码的 - 而且该 SQL 作业很快就会变得非常讨厌)。
至于第二个要求,我可以得到实际更改的属性名称。对于我们 80% - 90% 的字段,我们显示的是(格式正确的)属性名称,所以我可以根据 Pascal 大小写来分隔名称。但是,由于各种原因,其余字段不匹配。我们正在使用来自 MvcContrib 的 ASP.NET MVC 和 Fluent HTML 构建器,但即使我们将设置修改为在视图模型上有一个属性覆盖字段名称应该是什么(因此在代码中而不是只是视图),没有真正的方法可以将视图模型中的这些属性与正在保存的域对象匹配。
这两个问题的最后一个实用的解决方案就是在另一个服务中的每次更新操作之后调用审计日志服务,根据需要传递字段名称和员工信息,但是,我真的不想去那里明显原因。
对于这两个问题的想法将不胜感激。几天来搜索和绞尽脑汁并没有发现任何用处——大多数人似乎只停留在简单的旧/新淡水河谷记录,或者只是记录本身的“创建/更新”时间戳。