我正在EF中使用MVC3应用程序构建某种审计行为,并且我尝试了几种方法,试图避免对代码造成严重影响,当然,还试图避免尽可能多的额外代码,因为应用程序完成了35%的工作。审计EF没有T4
Audit
对象看起来像这样:
- AuditId
- 用户ID
- OperationId
- 的moduleId
- 时间戳
- 净荷
- <模块>
- <操作>
- <用户>
的想法去如下:
我创建了一个局部类隐藏SaveChanges()
并覆盖SaveChanges(SaveOptions)
。
然后我创建了两个重载的同一个方法来接收我的实体作为参数和/或不是SaveOptions
枚举参数。
除了明显的新SaveChanges()
,将我的Audit
实体的属性,但这里的问题发生:我需要一个User
,Module
和Operation
。
我目前的解决方案来解决这个问题如下:
- 我已经声明在构造函数类水平的
Audit
对象。 - 在控制器的构造函数中,我将
User
设置为我的Audit
对象。 - 在每种方法中,我根据需要设置
Operation
。 - 在保存更改中,我处理来自
ObjectStateManager
的有效负载(在本例中为xml)。
I'm very skeptic about this approach, it seems to be a little intrusive to my code. I've read lots of posts here in SO, but none of them helped me to improve this approach nor decide to change it. So please avoid linking things I've probably already read.
审计最好在数据库级别使用触发器完成。 –