我现在正在使用IPostUpdateEventListener接口进行更新审计日志记录,抓取旧值和新值,然后将每个更新的字段存储在“Audit”表中。这很好用,但有两个要求我难以满足:
1. 显示更新是哪个员工的。 2. 显示更新的“友好名称”。
对于第一个问题,我的第一反应是使用反射,在给定实体上查找并获取“Employee”属性,以找出它是为哪个员工更新的。但是,当你深入图形几个对象时,并没有自动方式返回给定的Employee对象,这个方法就会很快破裂。
解决第一个问题的想法从需要在每个对象上都有一个“Parent”属性,以便我可以遍历图形查找Employee类型(对我来说,这会使我们的域过于污染,只是一个简单的持久性问题),到使用单独的SQL作业来遍历外键并在事后填充Employee ID(迄今为止,我们都是基于代码的,我不想维护单独的SQL作业,因为那个SQL作业会非常恶心)。
至于第二个要求,我可以很好地得到实际更改的属性名称。对于我们80%-90%的字段,(正确格式化的)属性名称就是我们显示的内容,所以我可以根据Pascal大小写来分隔名称。然而,其余的字段由于各种原因不匹配。我们正在使用ASP.NET MVC和MvcContrib的Fluent HTML构建器,但即使我们修改了设置以至于在视图模型上有一个属性来覆盖字段名称应该是什么(因此将其放在代码中而不仅仅是视图中),也没有真正的方法将这些属性与被保存的域对象匹配。
最终的实用解决方案是在另一个服务中的每个更新操作之后调用审计日志记录服务,并根据需要传递字段名称和员工信息,但是,出于明显的原因,我真的不想去那里。
任何问题的想法都将不胜感激。搜索和思考几天都没有发现有用的东西-大多数人似乎只停留在简单的旧/新值记录或记录本身的“创建/更新”时间戳。
1. 显示更新是哪个员工的。 2. 显示更新的“友好名称”。
对于第一个问题,我的第一反应是使用反射,在给定实体上查找并获取“Employee”属性,以找出它是为哪个员工更新的。但是,当你深入图形几个对象时,并没有自动方式返回给定的Employee对象,这个方法就会很快破裂。
解决第一个问题的想法从需要在每个对象上都有一个“Parent”属性,以便我可以遍历图形查找Employee类型(对我来说,这会使我们的域过于污染,只是一个简单的持久性问题),到使用单独的SQL作业来遍历外键并在事后填充Employee ID(迄今为止,我们都是基于代码的,我不想维护单独的SQL作业,因为那个SQL作业会非常恶心)。
至于第二个要求,我可以很好地得到实际更改的属性名称。对于我们80%-90%的字段,(正确格式化的)属性名称就是我们显示的内容,所以我可以根据Pascal大小写来分隔名称。然而,其余的字段由于各种原因不匹配。我们正在使用ASP.NET MVC和MvcContrib的Fluent HTML构建器,但即使我们修改了设置以至于在视图模型上有一个属性来覆盖字段名称应该是什么(因此将其放在代码中而不仅仅是视图中),也没有真正的方法将这些属性与被保存的域对象匹配。
最终的实用解决方案是在另一个服务中的每个更新操作之后调用审计日志记录服务,并根据需要传递字段名称和员工信息,但是,出于明显的原因,我真的不想去那里。
任何问题的想法都将不胜感激。搜索和思考几天都没有发现有用的东西-大多数人似乎只停留在简单的旧/新值记录或记录本身的“创建/更新”时间戳。