我正在尝试使用 EF4(数据库优先)在上下文级别实现更改审计系统。我正在覆盖SaveChanges
和捕获状态为Added
、Deleted
或Modified
来自上下文的ObjectStateManager
. 这通常有效,但我遇到了一个问题,即没有一个实体具有这种状态(包括我在代码中更改的实体),但上下文确实对数据库进行了更改。我已经查看Unchanged
了状态为状态的条目列表,而我修改后的实体在该列表中。
我能看到的唯一复杂情况是我正在使用自我跟踪实体(因为这是一个 WCF 服务,通常将这些 STE 发送到客户端进行更改,然后客户端将修改后的 STE 备份以保持更改) . 似乎正在发生的事情是在服务器上检索并直接在那里修改(而不是传递给客户端并使用 STE ObjectChangeTracker
)的对象没有被标记为Modified
. 这是正常/预期的行为吗?如果是这种情况,那么显然上下文正在使用除 之外的其他ObjectStateManager
内容来确定哪些更改要持久保存到数据库,因为正在进行更改。
如何检测这些变化并跟踪它们?有谁知道上下文用于跟踪更改的是什么?我一直认为它是ObjectStateManager
,但似乎并非如此。