我正在根據實體框架中的上下文對象中跟蹤的更改編寫AuditLog。通過簡單注入器攔截/裝飾實體框架的DbContext.SaveChanges()
我需要能夠攔截電話Context.SaveChanges()
,因爲我然後遍歷Context.ChangeTracker.Entries()
並將它們記錄到我的AuditLog。
我需要能夠在DbContext
本身上做到這一點,因爲我都有可能通過我的UnitOfWork直接獲取DbContext
和PerWebRequest。
我試圖通過一個裝飾器來解決這個問題,它並不適合我!
public class AuditLogSaveChangesInKNContextDecorator : DbContext
{
DbContext _context;
IHandleCommand<AddAuditLogEntriesFromTrackedChangesAndSaveChangesCommand> _handler;
public AuditLogSaveChangesInKNContextDecorator(DbContext context,
IHandleCommand<AddAuditLogEntriesFromTrackedChangesAndSaveChangesCommand> handler)
{
_context = context;
_handler = handler;
}
public override int SaveChanges()
{
var changes = base.SaveChanges();
_handler.Handle(new AddAuditLogEntriesFromTrackedChangesAndSaveChangesCommand {
Context = _context
});
return changes;
}
}
任何想法?